Bean的生命周期

    技术2022-05-19  19

    1. 由BeanFactory读取Bean定义文件,并生成各个Bean实例 2. 使用依赖注入,Spring按照Bean定义的信息中配置的所有的属性值,包括bean中bean属性。 3. 如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递的id 4. 如果Bean实现了BeanFactoryAware接口,工程调用setBeanFactory()方法传入工厂自身。 5. 如果有BeanPostProcessor和Bean关联,那么其postProcessBeforeInitalization()方法将被调用。 6. 如果Bean指定了Init-method方法被调用 7. 最后,如果有BeanPostProcessor和Bean关联,那么其postProcessAfterInitalization()方法将被调用。 此时的Bean已经可以被应用系统使用,并将被保留在BeanFactory中知道它不在被需要可以将其从BeanFactory中删除。 如果Bean实现了disposableBean接口,destroy()方法被调用 注: BeanNameAware中的setBeanName()方法设置bean的名字此时得到的名字是xml文件中的配置的id属性。 例: applicationContext.xml 配置 StudentServiceImpl中 public class StudentServiceImpl implements StudentService, BeanNameAware { @Override public void setBeanName(String arg0) { System.out.println(arg0); } } 此时的输出结果是: studentServiceImpl 完整案例 StudentServiceImpl中 public class StudentServiceImpl implements StudentService,BeanNameAware,BeanFactoryAware, BeanPostProcessor { public void init() { System.out.println("调用初始化的方法"); } @Override public void insert() { sd.insert(); } @Override public void setBeanName(String arg0) { System.out.println("调用setBeanName其值为" + arg0); } @Override public void setBeanFactory(BeanFactory arg0) throws BeansException { System.out.println("调用setBeanFactory()"); } @Override public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException { System.out.println("调用postProcessAfterInitialization"); return arg0; } @Override public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException { System.out.println("调用postProcessBeforeInitialization"); return arg0; } } applicationContext.xml 配置 输出的结果是 调用setBeanName其值为studentServiceImpl 调用setBeanFactory() 调用postProcessBeforeInitialization 调用初始化的方法 调用postProcessAfterInitialization

    最新回复(0)