博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springBean的生命周期
阅读量:4492 次
发布时间:2019-06-08

本文共 5091 字,大约阅读时间需要 16 分钟。

 

1、Person接口

1 package com.xiaostudy.service;2 3 public interface Person {4     5     public void print();6 }

2、Person的实现类PersonImple.java

1 package com.xiaostudy.service; 2  3 import org.springframework.beans.BeansException; 4 import org.springframework.beans.factory.BeanFactory; 5 import org.springframework.beans.factory.BeanFactoryAware; 6 import org.springframework.beans.factory.BeanNameAware; 7 import org.springframework.beans.factory.InitializingBean; 8 import org.springframework.context.ApplicationContext; 9 import org.springframework.context.ApplicationContextAware;10 11 public class PersonImple implements Person, BeanNameAware, BeanFactoryAware, ApplicationContextAware, 12 InitializingBean {13     private String name;14     15     public PersonImple() {16         System.out.println("第一步:person初始化>>>>>>>>>>>>>>");17     }18     19     public void setName(String name) {20         System.out.println("第二步:name赋值>>>>>>>>>");21         this.name = name;22     }23     24     public String getName() {25         return name;26     }27 28     @Override29     public void setBeanName(String beanName) {30         System.out.println("第三步:beanName=" + beanName + "||||||||||");31     }32 33     @Override34     public void setBeanFactory(BeanFactory beanFactory) throws BeansException {35         System.out.println("第四步:beanFactory=" + beanFactory + "||||||||||");36     }37 38     @Override39     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {40         System.out.println("第五步:applicationContext=" + applicationContext + "||||||||||");41     }42 43     @Override44     public void afterPropertiesSet() throws Exception {45         System.out.println("第七步:afterPropertiesSet()||||||||||");46     }47     48     //跟生成代理冲突49     public void init() {50         System.out.println("第八步:init()||||||||||");51     }52     53     //这是实现Person接口的方法实现54     public void print() {55         System.out.println("第十步:PersonImple.print()>>>>>>>>>>>>>>");56     }57     58     public void destroy() {59         System.out.println("第十一步:destroy()");60     }61     62 }

3、实现BeanPostProcessor接口的MyBeanPostProcessor类

1 package com.xiaostudy.service; 2  3 import org.springframework.beans.BeansException; 4 import org.springframework.beans.factory.config.BeanPostProcessor; 5  6 public class MyBeanPostProcessor implements BeanPostProcessor { 7  8     @Override 9     public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {10         // TODO Auto-generated method stub11         System.out.println("第六步:postProcessBeforeInitialization()方法调用。。。第一个参数bean=" + bean + 12                             ";第二个参数beanName=" + beanName);13         //跟init-method冲突14         /*if(beanName.equals("person")) {15             // 生成代理16             return Proxy.newProxyInstance(MyBeanPostProcessor.class.getClassLoader(), bean.getClass().getInterfaces(),17                     new InvocationHandler() {18                 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {19                     System.out.println("开始事务>>>>>>>>");20                     Object obj = method.invoke(bean, args);21                     System.out.println("关闭事务<<<<<<<<");22                     return obj;23                 }24             });25         }*/26         return bean;27     }28 29     @Override30     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {31         // TODO Auto-generated method stub32         System.out.println("第九步:postProcessAfterInitialization()方法调用。。。第一个参数arg0=" + bean + 33                             ";第二个参数arg1=" + beanName);34         return bean;35     }36 37 }

4、测试类Test1.java

1 package com.xiaostudy.test; 2  3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.AbstractApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6  7 import com.xiaostudy.service.Person; 8  9 public class Test1 {10 11     public static void main(String[] args) {12         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");13         Person person = ac.getBean("person", Person.class);14         person.print();15         ((AbstractApplicationContext) ac).close();16     }17 18 }

5、spring的配置文件applicationContext.xml

1 
2
6 7
8
9
10
11

 

具体步骤大概讲解

1、初始化对象

 

2、如果有属性,那么会注入赋值

 

3、如果实现了BeanNameAware接口,那么会执行他的setBeanName()方法

4、如果实现了BeanFactoryAware接口,那么会执行他的setBeanFactory()方法

 

5、如果实现了ApplicationContextAware接口,那么会执行他的setApplicationContext()方法

6、如果实现了BeanPostProcessor接口,那么会执行他的postProcessBeforeInitialization()方法,这个要在spring配置文件中配置bean

7、如果实现了InitializingBean接口,那么会执行他的afterPropertiesSet()方法

8、在spring配置文件中,bean的位置声明init-method,才可以用自定义初始化方法

9、如果在第六步中实现了BeanPostProcessor接口,那么,到现在的第九步执行postProcessAfterInitialization()方法

 

10、这一步开始就可以使用Bean了

11、在spring配置文件中,bean的位置声明destroy-method,才可以用自定义销毁方法


 

转载于:https://www.cnblogs.com/xiaostudy/p/9533308.html

你可能感兴趣的文章
Error:Could not find common.jar (android.arch.core:common:1.0.0)
查看>>
api-ms-win-crt-runtime-l1-1-0.dll丢失问题
查看>>
使用Spring的AbstractRoutingDataSource实现多数据源切换
查看>>
Mongo spring 查询指定字段
查看>>
#大数加减乘除#校赛D题solve
查看>>
JDBC的使用(msql);
查看>>
UVa 10491 - Cows and Cars(全概率)
查看>>
RF接口测试
查看>>
UVA 1637 Double Patience
查看>>
最长公共子序列和最长子字符串_python_算法与数据结构
查看>>
网站技术架构发展之我见--[引子]
查看>>
中庸之道
查看>>
零基础逆向工程11_C语言05_结构体
查看>>
JAVA 调用命令并输出
查看>>
《Python》 字典
查看>>
个图标当十个用—多功能系统级图标制作攻略
查看>>
软件生命周期
查看>>
0527
查看>>
iis配置
查看>>
正则表达式
查看>>