# Bean 的生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class MyBeanPostProcessor implements InstantiationAwareBeanPostProcessor, DestructionAwareBeanPostProcessor {
public static final Logger log = LoggerFactory.getLogger(MyBeanPostProcessor.class);
@Override
public void postProcessBeforeDestruction(Object o, String s) throws BeansException {
if (s.equals("lifeCycleBean"))
log.info("<<<<<<<<< 销毁之前执行, 例如@PreDestroy");
}

@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean"))
log.info("<<<<<<<<< 实例化之前执行, 这里返回的对象会替换原本的bean");
return null;
}

@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean"))
log.info("<<<<<<<<< 实例化之后执行, 这里如果返回false会跳过依赖注入阶段");
return true;
}

@Override
public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean"))
log.info("<<<<<<<<< 依赖注入阶段执行, 例如@Autowired, @Value, @Resource");
return pvs;
}

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean"))
log.info("<<<<<<<<< 初始化之前执行, 这里返回的对象会替换掉原本的bean, 如@PostConstruct, @ConfigurationProperties");
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (beanName.equals("lifeCycleBean"))
log.info("<<<<<<<<< 实例化之后执行, 这里返回的对象会替换掉原本的bean, 如代理增强");
return bean;
}
}