12306项目(组件库-base)

打印 上一主题 下一主题

主题 691|帖子 691|积分 2073

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x


config 

ApplicationBaseAutoConfiguration.java(应用底子主动装配)

  1. @Bean
  2.     @ConditionalOnMissingBean//只有当 Spring 容器中不存在相同类型的 Bean 时,才会创建这个 Bean。
  3.     public ApplicationContextHolder congoApplicationContextHolder() {
  4.         return new ApplicationContextHolder();
  5.     }
  6.     @Bean
  7.     @ConditionalOnMissingBean
  8.     public ApplicationContentPostProcessor congoApplicationContentPostProcessor(ApplicationContext applicationContext) {
  9.         return new ApplicationContentPostProcessor(applicationContext);
  10.     }
  11.     @Bean
  12.     @ConditionalOnMissingBean
  13.     @ConditionalOnProperty(value = "framework.fastjson.safa-mode", havingValue = "true")//该注解用于条件加载 Bean,它会检查配置文件中的 framework.fastjson.safa-mode 属性是否为 true。如果配置了该属性且值为 true,则会创建 FastJsonSafeMode 实例。
  14.     public FastJsonSafeMode congoFastJsonSafeMode() {
  15.         return new FastJsonSafeMode();
  16.     }
复制代码
是应用底子主动装配配置类
作用:其主要目的是根据条件为 Spring 容器注册一些须要的 Bean。通过一些注解,如 @ConditionalOnMissingBean 和 @ConditionalOnProperty,该配置类确保只在满足特定条件时创建对应的 Bean。
知识点

  1. @ConditionalOnMissingBean//只有当 Spring 容器中不存在相同类型的 Bean 时,才会创建这个 Bean。
复制代码
  1. @ConditionalOnProperty(value = "framework.fastjson.safa-mode", havingValue = "true")//该注解用于条件加载 Bean,它会检查配置文件中的 framework.fastjson.safa-mode 属性是否为 true。如果配置了该属性且值为 true,则会创建 FastJsonSafeMode 实例。 
复制代码
constant

FilterOrderContent

  1. /**
  2.      * 用户信息传递过滤器执行顺序排序
  3.      */
  4.     public static final int USER_TRANSMIT_FILTER_ORDER = 100;
复制代码
 UserContent

用户常量
init

ApplicationContentPostProcessor(初始化后置处理处罚器)

ApplicationContentPostProcessor 类实现了 ApplicationListener<ApplicationReadyEvent>,其目的是监听 Spring Boot 应用中的 ApplicationReadyEvent 事件。这个事件在应用完全启动并且 Spring 上下文预备好处理处罚请求时触发。
  1. public class ApplicationContentPostProcessor implements ApplicationListener<ApplicationReadyEvent> {
复制代码

该类通过构造方法获取 ApplicationContext,它代表 Spring 的 IoC 容器,管理所有的 Bean
  1. private final ApplicationContext applicationContext;
复制代码
  1. /**
  2.      * 执行标识,确保Spring事件 {@link ApplicationReadyEvent} 有且执行一次
  3.      */
  4.     private final AtomicBoolean executeOnlyOnce = new AtomicBoolean(false);
复制代码
事件通过publishEvent()方法发布,传入的参数是触发事件的对象
  1. @Override
  2.     public void onApplicationEvent(ApplicationReadyEvent event) {
  3.         if (!executeOnlyOnce.compareAndSet(false, true)) {
  4.             return;
  5.         }
  6.         applicationContext.publishEvent(new ApplicationInitializingEvent(this));//事件通过此方法发布,传入的参数是触发应用的对象
  7.     }
复制代码



ApplicationInitializingEvent(初始化事件)

  1. 这个类继承了ApplicationEvent,这是Spring框架用于事件发布和监听的基类
  2. ApplicationEvent是Spring的核心事件模型,允许在应用程序上下文中发布事件并使监听器处理这些事件。
复制代码
  1. public class ApplicationInitializingEvent extends ApplicationEvent {
复制代码
  1. //构造方法需要传递一个 source 对象,表示该事件发生的源对象。通常这个对象可以是触发事件的组件或上下文(例如,应用上下文或服务类)。
  2.   //*调用父类 ApplicationEvent 的构造方法将 source 传递给父类,确保事件对象的初始化是基于标准 Spring 事件机制。
  3. public ApplicationInitializingEvent(Object source) {
  4.     super(source);
  5. }
复制代码
  1. public ApplicationInitializingEvent(Object source) {
  2.         super(source);
  3.     }
复制代码
safa

ApplicationContextHolder.java(Bean捕手)

实现了ApplicationContextAware接口用来持有和操作 Spring 容器的AplicationContext。通过这个类,你可以在整个应用程序中方便地访问 Spring 容器中的 Bean。
  1. public class ApplicationContextHolder implements ApplicationContextAware {
  2.     private static ApplicationContext CONTEXT;
  3.     @Override
  4.     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  5.         ApplicationContextHolder.CONTEXT = applicationContext;
  6.     }
复制代码
通过实现 ApplicationContextAware 接口,当 Spring 容器初始化时,会主动将 ApplicationContext 传递给 ApplicationContextHolder,并将其存储在静态变量 CONTEXT 中。

这意味着 ApplicationContextHolder 持有了整个 Spring 应用上下文,允许在应用的任何地方通过静态方法获取 Spring 容器中的 Bean。
  1. public static <T> T getBean(Class<T> clazz) {//通过类型获得bean
  2.         return CONTEXT.getBean(clazz);
  3.     }
  4.     /**
  5.      * Get ioc container bean by name.
  6.      */
  7.     public static Object getBean(String name) {//通过名称获取bean
  8.         return CONTEXT.getBean(name);
  9.     }
  10.     /**
  11.      * Get ioc container bean by name and type.
  12.      */
  13.     public static <T> T getBean(String name, Class<T> clazz) {//通过名字与类型
  14.         return CONTEXT.getBean(name, clazz);
  15.     }
  16.     /**
  17.      * Get a set of ioc container beans by type.
  18.      */
  19.     public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {//通过一组特定的数据
  20.         return CONTEXT.getBeansOfType(clazz);
  21.     }//获取一个包含bean名字与实例的map集合
复制代码
  1. public static <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) {
  2.         return CONTEXT.findAnnotationOnBean(beanName, annotationType);
  3.     }//查找bean上的注解
复制代码


  1. public static ApplicationContext getInstance() {
  2.         return CONTEXT;
  3.     }//获取ApplicationContext实例
复制代码
Singlegon.java(单例对象容器)



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表