您的位置:首页 > 编程语言 > Java开发

spring bean 生命周期事件

2019-05-29 00:07 1326 查看

整体流程图

程序示例

maven依赖

<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

</dependencies>

配置类

@Configuration
@ComponentScan("per.ym.processor, per.ym.service")
public class LifeCycleConfig {

@Bean(initMethod = "init", destroyMethod = "destroy")
public LifeCycleBean lifeCycleBean() {
return new LifeCycleBean();
}
}

实例bean

public class LifeCycleBean implements InitializingBean, BeanNameAware, BeanFactoryAware, BeanClassLoaderAware {

public LifeCycleBean() {
System.out.println("consturctor......");
}

public void init() {
System.out.println("init......");
}

@Autowired
public void setService(PersonService service) {
System.out.println("setService......");
}

public void destroy() {
System.out.println("destroy......");
}

@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet......");
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("setBeanFactory......");
}

@Override
public void setBeanName(String name) {
System.out.println("setBeanName......");
}

@Override
public void setBeanClassLoader(ClassLoader classLoader) {
System.out.println("setBeanClassLoader......");
}

}

InstantiationAwareBeanPostProcessor

package per.ym.processor;

@Component
public class MyInstantiationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {

@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean")) {
System.out.println("postProcessBeforeInstantiation......");
}
return null;
}

@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean")) {
System.out.println("postProcessAfterInstantiation......");
}
return true;
}

@Override
public PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean")) {
System.out.println("postProcessPropertyValues......");
}
return pvs;
}

}

BeanPostProcessor

package per.ym.processor;

@Component
public class MyPostProcess implements BeanPostProcessor {

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean")) {
System.out.println("postProcessBeforeInitialization......");
}
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean")) {
System.out.println("postProcessAfterInitialization......");
}
return bean;
}

}

service

package per.ym.service;

@Service
public class Service {
}

测试类

public class Test_Normal {

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(LifeCycleConfig.class);

@Test
public void test() {
applicationContext.getBean("lifeCycleBean");
applicationContext.close();
}
}

测试结果:

postProcessBeforeInstantiation......
consturctor......
postProcessAfterInstantiation......
postProcessPropertyValues......
setService......
setBeanName......
setBeanClassLoader......
setBeanFactory......
postProcessBeforeInitialization......
afterPropertiesSet......
init......
postProcessAfterInitialization......
destroy......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: