InitializingBean 和 DisposableBean
init-method 和 destroy-method
@PostConstruct 和 @PreDestroy
In Spring, InitializingBean and DisposableBean are two marker interfaces, a useful way for Spring to perform certain actions upon bean initialization and destruction.
- For bean implemented InitializingBean, it will run
afterPropertiesSet()
after all bean properties have been set. - For bean implemented DisposableBean, it will run
destroy()
after Spring container is released the bean.
In Spring, you can use init-method and destroy-method as attribute in bean configuration file for bean to perform certain actions upon initialization and destruction.
Note
The @PostConstruct and @PreDestroy annotation are not belong to Spring, it’s located in the J2ee library – common-annotations.jar.
具体的使用
对于第一个:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import
org.springframework.beans.factory.DisposableBean;
import
org.springframework.beans.factory.InitializingBean;
public
class
CustomerService
implements
InitializingBean, DisposableBean
{
String message;
public
String getMessage() {
return
message;
}
public
void
setMessage(String message) {
this
.message = message;
}
public
void
afterPropertiesSet()
throws
Exception {
System.out.println(
"Init method after properties are set : "
+ message);
}
public
void
destroy()
throws
Exception {
System.out.println(
"Spring Container is destroy! Customer clean up"
);
}
}
|
下面的例子展示了 init-method and destroy-method.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public
class
CustomerService
{
String message;
public
String getMessage() {
return
message;
}
public
void
setMessage(String message) {
this
.message = message;
}
public
void
initIt()
throws
Exception {
System.out.println(
"Init method after properties are set : "
+ message);
}
public
void
cleanUp()
throws
Exception {
System.out.println(
"Spring Container is destroy! Customer clean up"
);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<
bean
id="customerService" class="com.mkyong.customer.services.CustomerService"
init-method="initIt" destroy-method="cleanUp">
<
property
name="message" value="i'm property message" />
</
bean
>
</
beans
>
|
第三种的使用:
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
|
import
javax.annotation.PostConstruct;
import
javax.annotation.PreDestroy;
public
class
CustomerService
{
String message;
public
String getMessage() {
return
message;
}
public
void
setMessage(String message) {
this
.message = message;
}
@PostConstruct
public
void
initIt()
throws
Exception {
System.out.println(
"Init method after properties are set : "
+ message);
}
@PreDestroy
public
void
cleanUp()
throws
Exception {
System.out.println(
"Spring Container is destroy! Customer clean up"
);
}
}
|
By default, Spring will not aware of the @PostConstruct and @PreDestroy annotation. To enable it, you have to either register ‘CommonAnnotationBeanPostProcessor‘ or specify the ‘<context:annotation-config />‘ in bean configuration file,
1. CommonAnnotationBeanPostProcessor
1
2
3
4
5
6
7
8
9
10
11
12
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<
bean
class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
<
bean
id="customerService" class="com.mkyong.customer.services.CustomerService">
<
property
name="message" value="i'm property message" />
</
bean
>
</
beans
>
|
2. <context:annotation-config />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<
context:annotation-config
/>
<
bean
id="customerService" class="com.mkyong.customer.services.CustomerService">
<
property
name="message" value="i'm property message" />
</
bean
>
</
beans
>
|