Bean的生命周期包括Bean的创建,Bean的使用,Bean的销毁三大过程。
各种通知
这些通知是系统初始化完成的工作,表现出来的就是各种通知,一个初始化完了就是一个通知,通知是一个一个的接口,bean类需要继承了这些接口才能自己重写对应的通知方法(aware),重写方法的默认参数就是系统初始化时使用的默认值,可以在重写的方法中感知到系统初始化的值,接口如:ApplicationContextAware、BeanNameAware
@Component
public class User implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println(s);
}
}
上面的类实现了BeanNameAware接口,重写的setBean方法就可以在Bean的名称被初始化好之后调用,参数String s就是Bean的name。
初始化前置方法
初始化方法(有XML格式和注释两种设置方法)
XML格式
Spring原生API的配置文件中的Bean标签可以设置一个init-method属性,这个属性的值就是初始化方法的名称。
使用@PostConstruct注解,这个注解下方的方法就是初始化方法
初始化后置方法
初始化前置和后置方法都是一个接口实现的,这个接口就是BeanPostProcessor,它的两个方法postProcessBeforeInitialization,postProcessAfterInitialization就是Bean的初始化前置方法和后置方法,但是在默认的单例作用域下,这两个方法不会被显示的调用,需要将作用域改成prototype,才能在注入这个Bean的时候看到显示的调用,启动spring的时候都不会显示的调用。
@Controller
@Scope("prototype")
public class User implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化前置方法被调用");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化后置方法被调用");
return bean;
}
@PostConstruct
public void test(){
System.out.println("User的注解初始化方法");
}
}
也就是Bean的注入,三种方式,属性注入,setter注入,构造方法注入。
都需要使用到@Autowired注解,这个注解只能在被五大类注解修饰了的类里面使用。
详情请看@Autowired注入和@Resource注入
知道有这个流程就行。