spring bean的初始化方式(init,destroy)
spring容器中bean的初始化方式大体有三种:
- @PostConstruct ,@PreDestroy: 从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy。@PostConstruct会在Servlet构造函数之后,初始化之前执行
package com.edu.bean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
@Component
public class Color {
@PostConstruct
public void init(){
System.out.println("init......");
}
@PreDestroy
public void destroy(){
System.out.println("destroy.........");
}
}
package com.edu.bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
public class Test1 {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.edu.bean");
context.close();
}
}
输出:
init......
destroy.........
- @Bean中指定initMethod,destroyMethod方法
package com.edu.bean;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
public class Color {
@PostConstruct
public void init(){
System.out.println("init......");
}
public void init1(){
System.out.println("init1......");
}
@PreDestroy
public void destroy(){
System.out.println("destroy.........");
}
public void destroy1(){
System.out.println("destroy1.........");
}
}
package com.edu.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
@Configuration
class Config {
@Bean(name = "color",initMethod = "init1",destroyMethod = "destroy1")
public Color getColor(){
return new Color();
}
}
package com.edu.bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
public class Test1 {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
context.close();
}
}
输出:
init......
init1......
destroy.........
destroy1.........
证明@PostConstruct 修饰的方法是在initMethod标注的方法之前执行,@PreDestroy修饰的方法是在destroyMethod 标注的方法之前执行
- interface InitializingBean,DisposableBean:重写afterPropertiesSet,destroy方法
package com.edu.bean;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
@Component
public class Color implements InitializingBean, DisposableBean {
@PostConstruct
public void init(){
System.out.println("init......");
}
@PreDestroy
public void destroy(){
System.out.println("destroy.........");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("init1.........");
}
@Override
public void destroy() throws Exception {
System.out.println("destroy1......");
}
}
package com.edu.bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by IntelliJ IDEA.
* User: chenzhubing
* Date: 2019/6/17
*/
public class Test1 {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.edu.bean");
context.close();
}
}
输出:
init......
init1.........
destroy.........
destroy1......
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/09/07 01:41