标签:初始化 生命周期 applicationContext Spring 接口 Bean 销毁 close 方法
Bean的生命周期的生命周期可分为11部分,比较有操作的几个部分:
初始化方法前
初始化方法
初始化方法后
目标方法
销毁方法
初始化和销毁(和销毁方法的执行条件)
<bean id="" class="" init-method="初始化方法名称" destroy-method="销毁方法名称">
初始化方法和销毁方法在实现接口的“服务类”中
测试
测试类中方法:
public void demo(){
String xmlpath =“com.···.beans.xml”
ApplicationContext applicationContext= new ClassPathXmlApplicationContext(xmlpath);
BookSersvice bookSvice =(BookSvice)applicationContext.getBean(“BooksvicesID”);
bookSvice.addbook();
}
测试结果:初始化方法和目标方法执行了,但是销毁方法没有执行
原因是工厂/容器 必须close,且为单例,销毁方法才能执行
调用close方法application.close()报错,但是close方法接口中未定义close(),但实现类中提供了
方法一:反射:applicationContext.getClass().getMethod(“close”).invoke(applicationContext);
方法二:直接创建类对象,直接使用类对象而不用接口
ClssPathXmlApplicationContext applicationContext=new ClssPathXmlApplicationContext(xmlpath);
后处理Bean
BeanPostProcessor接口,此接口有两个方法,只要实现此接口,并将实现类提供给Spring容器( id="" class=“实现接口的类” ),Spring容器将自动按顺序执行
此
接
口
有
两
个
方
法
{
O
b
j
e
c
t
p
o
s
t
P
r
o
c
e
s
s
A
f
t
e
r
I
n
i
t
i
z
a
t
i
o
n
(
O
b
j
e
c
t
b
e
a
n
,
S
t
r
i
n
g
b
e
a
n
n
a
m
e
)
O
b
j
e
c
t
p
o
s
t
P
r
o
c
e
s
s
B
e
f
o
r
e
I
n
i
t
i
z
a
t
i
o
n
(
O
b
j
e
c
t
b
e
a
n
,
S
t
r
i
n
g
b
e
a
n
n
a
m
e
)
\mathrm{此接口有两个方法}\left\{\begin{array}{l}Object\;postProcessAfterInitization(Object\;bean,String\;beanname)\\Object\;postProcessBeforeInitization(Object\;bean,String\;beanname)\end{array}\right.
此接口有两个方法{ObjectpostProcessAfterInitization(Objectbean,Stringbeanname)ObjectpostProcessBeforeInitization(Objectbean,Stringbeanname)
注1:方法中的参数beanname可用于判断-method.getName().equals(beanname)
注2:before方法中如果ruturn null则后续的方法都将不能执行,如果直接return bean 则没有增强但是能够继续执行
注3:返回代理对象的方法需要写到After方法中,但是因为代理对象只有接口中的方法,但是初始化方法和销毁方法都放到了实现BeanPostProcessor接口的类中,所以写在Before中不可行
After:return Proxy.newProxyInstance(MyBeanPostProcessor.class.getClassLoader(),bean.getClass.getInterface(),new InvocationHandler(){publin Object invoke()~~~})匿名内部类+final(修饰After)
标签:初始化,生命周期,applicationContext,Spring,接口,Bean,销毁,close,方法 来源: https://blog.csdn.net/ResumeProject/article/details/112814260
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。