小小程序员
BlogJava
|
首页
|
发新随笔
|
发新文章
|
|
|
管理
spring中Bean的生命周期
先贴代码:
Life类
package
com.open.bean;
import
org.springframework.beans.BeansException;
import
org.springframework.beans.factory.BeanFactory;
import
org.springframework.beans.factory.BeanFactoryAware;
import
org.springframework.beans.factory.BeanNameAware;
import
org.springframework.beans.factory.DisposableBean;
import
org.springframework.beans.factory.InitializingBean;
public
class
Life
implements
BeanFactoryAware, BeanNameAware,
InitializingBean, DisposableBean
{
private
String msg;
public
Life()
{
System.out.println(
"
msg=
"
+
msg);
System.out.println(
"
构造函数
"
);
}
public
void
setBeanFactory(BeanFactory beanFactory)
throws
BeansException
{
System.out.println(
"
setBeanFactory
"
);
}
public
void
setBeanName(String name)
{
System.out.println(
"
setBeanName
"
);
}
public
void
init()
{
System.out.println(
"
初始化
"
);
}
public
Object postProcessBeforeInitialization(Object bean, String beanName)
throws
BeansException
{
System.out.println(
"
postProcessBeforeInitialization
"
);
return
null
;
}
public
Object postProcessAfterInitialization(Object bean, String beanName)
throws
BeansException
{
System.out.println(
"
postProcessAfterInitialization
"
);
return
null
;
}
public
void
afterPropertiesSet()
throws
Exception
{
System.out.println(
"
afterPropertiesSet
"
);
}
public
void
destroy()
throws
Exception
{
System.out.println(
"
destroy
"
);
}
public
String getMsg()
{
return
msg;
}
public
void
setMsg(String msg)
{
this
.msg
=
msg;
}
}
BeanPostProcessorImp类
package
com.open.bean;
import
org.springframework.beans.BeansException;
import
org.springframework.beans.factory.config.BeanPostProcessor;
public
class
BeanPostProcessorImp
implements
BeanPostProcessor
{
public
Object postProcessBeforeInitialization(Object bean, String beanName)
throws
BeansException
{
System.out.println(
"
postProcessBeforeInitialization
"
);
return
bean;
}
public
Object postProcessAfterInitialization(Object bean, String beanName)
throws
BeansException
{
System.out.println(
"
postProcessAfterInitialization
"
);
return
bean;
}
}
BeanCounter类
package
com.open.bean;
import
org.springframework.beans.BeansException;
import
org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
public
class
BeanCounter
implements
BeanFactoryPostProcessor
{
public
void
postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory)
throws
BeansException
{
System.out.println(
"
类的数量=
"
+
beanFactory.getBeanDefinitionCount());
}
}
bean.xml
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<!
DOCTYPE beans PUBLIC
"
-//SPRING//DTD BEAN//EN
"
"
http://www.springframework.org/dtd/spring-beans.dtd
"
>
<
beans
>
<
bean id
=
"
life
"
name
=
"
life_name
"
class
=
"
com.open.bean.Life
"
init
-
method
=
"
init
"
>
<
property name
=
"
msg
"
value
=
"
lifexxxx
"
/>
</
bean
>
<
bean id
=
"
processor
"
class
=
"
com.open.bean.BeanPostProcessorImp
"
/>
<
bean id
=
"
counter
"
class
=
"
com.open.bean.BeanCounter
"
/>
</
beans
>
测试类
package
com.open.bean;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public
class
Test
{
public
static
void
main(String[] args)
{
ClassPathXmlApplicationContext cx
=
new
ClassPathXmlApplicationContext(
"
bean.xml
"
);
Life life
=
(Life)cx.getBean(
"
life
"
);
}
}
输出结果
类的数量=
3
msg
=
null
构造函数
setBeanName
setBeanFactory
postProcessBeforeInitialization
afterPropertiesSet
初始化
postProcessAfterInitialization
解释:
调用BeanFactoryPostProcessor接口的postProcessBeanFactory方法
-->实例化,调用构造函数-->设置属性值
-->调用BeanNameAware的setBeanName()方法
-->调用BeanFactoryAware接口的setBeanFactory
-->调用BeanPostProcessor接口的postProcessBeforeInitialization()
-->调用InitializingBean接口的afterPropertiesSet()
-->调用bean.xml中制定的init-method指定init()方法
-->调用BeanPostProcessor接口的postProcessAfterInitialization()
容器关闭
-->DisposableBean接口的destroy()
-->调用bean.xml中制定的destroy-method指定的go()方法
发表于 2006-06-06 19:56
~小Q
阅读(1572)
评论(3)
编辑
收藏
所属分类:
『
Spring
』
评论
#
re: spring中Bean的生命周期
不错啊
#
re: spring中Bean的生命周期
为什么我无法显示类的数量?
#
re: spring中Bean的生命周期
写的太好了 好强
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
图解spring mvc
Quartz的cron表达式
在spring利用javamail,quartz定时发送邮件
spring对java远程调用的简化(三)之HTTPinvoker
spring对java远程调用的简化(二)之Hessian,Burlap
spring对java远程调用的简化(一)之RMI
spring中事务的属性
事务的特点以及spring提供事务管理器的简介
ProxyFactoryBean属性介绍
spring中基础核心接口介绍
<
2009年8月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
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
1
2
3
4
5
公告
spring-谁与争锋
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
『
eclipse
』(2)
(rss)
『
Flash
』(1)
(rss)
『
JavaScript
』(1)
(rss)
『
Maven
』(1)
(rss)
『
Spring
』(17)
(rss)
『
springside
』(1)
(rss)
『
汇编
』(4)
(rss)
『
计划
』(1)
(rss)
相册
spring
Blog
论坛
积分与排名
积分 - 62465
排名 - 841
最新评论
1. re: 在spring利用javamail,quartz定时发送邮件[未登录]
感觉不错吗、
--xiaoxiao
2. re: JavaScript中的arguments,callee,caller,call,appy
不错啊
--artwl
3. re: JavaScript中的arguments,callee,caller,call,appy[未登录]
注意,arguments[0] 是对的。arguments是一个Object。
--你好
4. re: JavaScript中的arguments,callee,caller,call,appy
评论内容较长,点击标题查看
--zhangsir199
5. re: Maven的eclipse插件使用的flash教程[未登录]
除了插件是真的之外,其他怎么全是假的?
--王子