콩 수명주기 방법
우리는 콩 초기화 함수와 소멸자를 정의 할 수 있습니다, 봄이 자동으로 시작 및 종료에 그들을 호출합니다.
XML 기반의
사용법 :
<bean id="connector" class="com.bailiban.day2.lifecycle.MyConnector"
init-method="init" destroy-method="destroy" />
- INIT-있어서 초기화 설정하는 단계;
- 파괴-방법 : 삭제 방법을 설정하는 단계;
예 :
/**
* xml配置:
* init-method="init" destroy-method="destroy"
*/
public class MyConnector {
public MyConnector() {
System.out.println("MyConnector: 调用构造函数...");
}
public void init() {
System.out.println("MyConnector: 调用初始化函数,创建连接...");
}
public Object getConnection() {
System.out.println("获取连接...");
return null;
}
public void destroy() {
System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
}
}
테스트 :
/**
* 在xml文件中配置初始化和销毁方法
* init-method="init" destroy-method="destroy"
*/
static void xmlTest() {
// 在初始化Spring容器的时候,会创建MyConnector类
// 并调用其构造函数和初始化函数
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"com/bailiban/day2/lifecycle/lifecycle.xml");
// 获取MyConnector对象,并调用相关方法。
// 注意:MyConnector对象不是在getBean方法中创建的,而是在Spring初始化时已被创建
context.getBean(MyConnector.class).getConnection();
// 关闭Spring容器,bean的销毁方法会被执行
context.close();
}
결과 :
MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...
기반 인터페이스
사용법 :
/**
* 通过实现InitializingBean接口,创建初始化烦方法
* 实现DisposableBean接口,创建销毁方法
*/
public class MyConnector2 implements InitializingBean, DisposableBean {
public MyConnector2() {
System.out.println("MyConnector: 调用构造函数...");
}
public Object getConnection() {
System.out.println("获取连接...");
return null;
}
@Override
public void destroy() {
System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("MyConnector: 调用初始化函数,创建连接...");
}
}
- InitializingBean 표시 상속 인터페이스 : 고쳐 쓰기 방법에 의해 afterPropertiesSet는, 방법은 초기화하기 위해 제공된다;
- 상속 DisposableBean 표시 인터페이스는 다음 destroy 메소드를 재정 의하여, 파괴의 방법을 설정;
테스트 :
/**
* 通过实现InitializingBean接口,创建初始化方法
* 实现DisposableBean接口,创建销毁方法
*/
static void interfaceTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"com/bailiban/day2/lifecycle/lifecycle.xml");
context.getBean(MyConnector2.class).getConnection();
context.close();
}
결과 :
MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...
노트를 바탕으로
사용법 :
/**
* 基于注解的初始化方法和销毁方法
*/
@Component
public class MyConnector3 {
public MyConnector3() {
System.out.println("MyConnector: 调用构造函数...");
}
public Object getConnection() {
System.out.println("获取连接...");
return null;
}
@PreDestroy
public void destroy() {
System.out.println("MyConnector: 调用销毁函,关闭连接,清除资源...");
}
@PostConstruct
public void init() throws Exception {
System.out.println("MyConnector: 调用初始化函数,创建连接...");
}
}
- @PostConstruct : 초기화 방법을 설정하는 단계;
- @PreDestroy : 삭제 방법을 설정;
XML 구성 :
<context:component-scan base-package="com.bailiban.day2.lifecycle" />
@PostConstruct를 찾을 수 그렇지 않으면, 당신의 pom.xml에 종속성을 추가해야합니다 :
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
테스트 :
/**
* 基于注解的初始化方法和销毁方法
*/
static void annotationTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"com/bailiban/day2/lifecycle/lifecycle.xml");
context.getBean(MyConnector3.class).getConnection();
context.close();
}
결과 :
MyConnector: 调用构造函数...
MyConnector: 调用初始化函数,创建连接...
获取连接...
MyConnector: 调用销毁函,关闭连接,清除资源...