Spring Bean生命周期
Posted hot小热
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Bean生命周期相关的知识,希望对你有一定的参考价值。
Spring Bean生命周期
Spring Bean生命周期 ----------------------------------------------------------------------------------- 1.Bean实例化和DI: --> 扫描XML文件/注释类/Java配置类中的bean定义 --> 创建bean实例 --> 注入bean依赖项(调用setter,为自动装配字段设置值) 2.检查Spring Awareness: --> 如果bean类型实现了BeanNameAware,则调用setBeanName() --> 如果bean类型实现了BeanClassLoaderAware,则调用setBeanClassLoader() --> 如果bean类型实现了ApplicationContextAware,则调用setApplicationContext() 3.创建bean生命周期回调 --> 如果存在@PostConstruct注释,则使用它注释调用方法 --> 如果bean类型实现了InitialzingBean,则调用afterPropertiesSet() --> 如果bean定义包含init-method或@Bean(initMethod="..."),则调用初始方法 ------------------------------------------------------------------------------------ 4.销毁bean生命周期回调 --> 如果存在@PreDestroy注释,则使用它注释调用方法 --> 如果bean类型实现了DisposableBean,则调用destroy() --> 如果bean定义包含destroy-method或@Bean(destroyMethod="..."),则调用销毁方法 实现了InitialzingBean接口调用afterPropertiesSet()和使用public void init()方法的区别: xml中bean元素不需要在使用init-method属性来告诉spring该调用哪个初始化方法了。 完全使用注解的方式: 创建一个配置类,实例化对象,xml中的配置,通过对象setter设置。 @Configuration @Lazy @Bean(initMethod="init") ================================================= 使用关闭钩子: (GenericXmlApplicationContext)ctx.registerShutDownHook(); @PostConstruct public void afterPropertiesSet(); @PreDestory public void destroy(); ================================================= FactroyBean接口 public MessageDigest getObject(); public Class<?> getObjectType(); PropertyEditorSupport类 public void setAsText(String text); 理解:xml配置setter注入一个字符串,通过CustomEditorConfigurer类的setCustomEditors方法传入参数Map<MyObject,MyPropertyEditor> 。 字符串传入MyPropertyEditor类的setAsText转换再调用setValue(new MyObject())返回MyObject对象。 ApplicationListener接口 public void onApplicationEvent(MessageEvent event); 理解:xml配置发布者(Pulisher)和监听器(Listener)。 发布者继承ApplicationContextAware接口获取到ctx,使用ctx.pulishEvent传入事件对象(Event)。 监听器的onApplicationEvent会接收事件对象(Event),获取相关信息,编写逻辑代码。 发布者的实例只要调用自定义的发布方法,监听器便会执行监听器onApplicationEvent方法的逻辑代码。 访问资源 ctx.getResource("xx"); 文件系统:"file:///e:/data.txt" 类路径:"classpath:data.txt" URL资源:"https://www.baidu.com" Spring混合配置 理解:Provider和Render 1.正向:将Provider配置在xml中,然后Render在业务类中通过自动装配,获取使用,创建特定功能的Render对象,并将其返回。 2.反向:将业务类和特定功能的Render对象配置在xml中,然后在业务类中 @Bean 返回Provider对象。xml中使用<context:annotation-config/> 配置文件 第一种方法: xml中的<beans ... profile="xxx"> vm args: -Dspring.profiles.active="highschool" -Dspring.profiles.active="kindergarten" 第二种方法: //1.config @Profiles("xxx") public class XxxConfig{ @Bean public XxxInterface xxxInterface(){ return new XxxInterfaceImpl(); } } //2.main new AnnotationConfigApplicationContext(XxxConfig.class,YyyConfig.class); //3.vm args: -Dspring.profiles.active="highschool" -Dspring.profiles.active="kindergarten" 指定运行的配置文件 @ActiveProfiles("xxxx")
以上是关于Spring Bean生命周期的主要内容,如果未能解决你的问题,请参考以下文章