서문
저자들은 배운 내용을 정리하기 위해 나중에 복습할 수 있도록 학습 노트 형식의 블로그 포스팅을 시작하려고 합니다. 물론 신진 신기술 학습에 도움이 될 수 있다면 그것 또한 훌륭합니다. 필자는 식물인간이므로 글에 오류가 있다면 독자들의 비판과 정정을 환영합니다.
보물 발견
얼마 전 이해하기 쉽고 재미있는 거대한 인공지능 학습 웹사이트를 발견해서 여러분과 공유하지 않을 수 없었습니다. 트레저 포털입니다.
콩의 수명 주기 이해하기
- 수명 주기: 생성에서 소멸까지의 전체 프로세스; 콩 수명 주기: 콩의 생성에서 소멸까지의 전체 프로세스; 콩 수명 주기 제어: 콩을 생성한 후 이전에 콩을 파괴하기 위해 무언가를 수행합니다.
- Spring 빈의 수명 주기를 이해하는 것은 쉽습니다. 빈이 인스턴스화되면 사용 가능한 상태로 만들기 위해 몇 가지 초기화를 수행해야 할 수 있습니다. 마찬가지로, 빈이 더 이상 필요하지 않아 컨테이너에서 제거되면 몇 가지 정리가 필요할 수 있습니다.
- 빈 인스턴스화와 소멸 사이에 발생하는 몇 가지 활동이 있지만, 빈 초기화 및 소멸 시 필요한 두 가지 중요한 수명 주기 콜백 메서드가 있습니다.
- 빈의 마운트 및 마운트 해제를 정의하려면, init-method 및/또는 destroy-method 인수와 함께 .init-method 속성을 선언하여 빈이 인스턴스화될 때 즉시 호출되는 메서드를 지정하기만 하면 됩니다. 마찬가지로 destroy-method는 컨테이너에서 빈이 제거된 후에만 호출되는 메서드를 지정합니다.
- 콩의 수명 주기는 콩의 정의 - 콩의 초기화 - 콩의 사용 - 콩의 소멸로 표현할 수 있습니다.
빈 라이프사이클 구현 프로세스
- 구성에 따라 빈 생성자 또는 팩토리 메서드를 호출하여 빈을 인스턴스화합니다.
- 구성 파일에 init-method 속성을 통해 초기화 메서드가 지정되어 있으면 초기화 메서드가 호출됩니다.
- 빈의 범위가 scope="singleton"으로 지정되면 빈이 Spring IoC 캐시 풀에 배치되어 Spring의 빈 수명 주기 관리가 트리거되고, 빈의 범위가 scope="prototype"으로 지정되면 빈의 수명 주기를 관리하는 호출자에게 빈이 넘겨지고 Spring은 더 이상 빈을 관리하지 않습니다. = "prototype"으로 지정하면, 빈은 빈의 라이프사이클을 관리하는 호출자에게 전달되고 Spring은 더 이상 빈을 관리하지 않습니다.
- Spring은 특정 인터페이스의 구현이나 속성 설정에 의해 영향을 받을 수 있는 빈에 대한 상세하고 포괄적인 수명 주기 프로세스를 제공합니다. 원하는 대로 속성을 구성할 수 있지만, 빈 구현을 과도하게 사용하면 Spring과 너무 긴밀하게 통합된 코드가 될 수 있으므로 사용하지 않는 것이 좋습니다.
빈 라이프사이클 제어 시작 사례
1. 코드 작성
- 생성 베나 초기화 및 소멸을 나타내는 메서드를 BookDaoImpl 구현 클래스에서 정의합니다.
javapackage org.example.dao.impl; import org.example.dao.BookDao; public class BookDaoImpl implements BookDao { public void save() { System.out.println("book dao save ..."); } //작업에 해당하는 빈 초기화를 나타냅니다. public void init(){ System.out.println("init..."); } //해당 작업 전에 콩이 파괴되었음을 나타냅니다. public void destory(){ System.out.println("destory..."); } }
3. BookService 코드를 주석 처리하고, 시뮬레이션 테스트 클래스를 실행하고, BookDao 빈 생성 및 삭제 프로세스를 관찰합니다.
4. 운영 결과 관찰
5. 간단한 분석
- 실행 결과에서 빈 초기화는 성공했지만 파괴 작업을 수행하지 않았음을 알 수 있으며, 그 이유는 실행 중인 자바 가상 머신이 프로그램을 종료하고 작업의 파괴를 수행하지 않기 때문에 자체 닫기 문인 ctx.close()를 추가해야 하기 때문입니다.
- 그러나 ApplicationContext 인터페이스에는 이 메서드가 없지만 구현 클래스에는 있으므로 이 메서드를 호출하려면 구현 클래스인 ClassPathXmlApplicationContext를 사용해야 합니다.
IOC 컨테이너를 닫는 두 가지 방법
1. ioc 컨테이너를 닫는 코드와 결과는 다음과 같습니다.
2. ioc 컨테이너를 종료하는 두 번째 방법: 셧다운 후크
- Java 프로그램이 종료될 때, 특히 비정상적으로 종료되는 경우 스레드 풀, 연결 풀, 파일 핸들 등을 닫는 등 몇 가지 사후 관리를 먼저 수행해야 할 수도 있습니다.
- 애프터케어 코드가 실행될 수 있도록 하는 방법은 무엇인가요? Java는 종료 후크를 등록하는 셧다운 후크 registerShutdownHook() 메서드를 사용자에게 제공합니다.
3. IOC 컨테이너의 두 가지 폐쇄 유형에 대한 간략한 분석
프로그램에서 닫기 후크 함수 코드의 위치는 닫기 () 메서드만큼 까다 롭지 않으며, 책 도우 저장 () 메서드의 맨 아래로 이동하면 닫기 () 메서드가 더 폭력적 일 수 있습니다.
상속 인터페이스를 통한 바인딩 수명 주기 방법
1. 바인딩 소멸 및 초기화 방법 개선 - 상속 인터페이스
- 초기화 빈, 일회용 빈 인터페이스를 구현합니다.
- destroy 및 afterPropertiesSet 메서드 재정의하기
javapublic class BookServiceImpl implements BookService, InitializingBean, DisposableBean { private BookDao bookDao; public void setBookDao(BookDao bookDao) { this”.bookDao = bookDao; } public void save() { System.out.println("book service save ..."); bookDao.save(); } public void destroy() throws Exception { System.out.println("service destroy"); } public void afterPropertiesSet() throws Exception { System.out.println("service init"); } }
2. 시뮬레이션 테스트 클래스 Main2 결과
시뮬레이션 테스트 클래스 Main2는 BookService 빈을 호출하지 않지만 핵심 구성 파일에서 BookService 빈을 정의하고, 빈을 생성할 시간이 생성되고, 초기화가 초기화되고, 파괴가 파괴됩니다.
요약
기사가 도움이 되었거나 기사의 작성자가 나쁘지 않다고 생각되면 관심, 칭찬, 수집 지원을 클릭하여 교환 및 비판의 메시지를 남길 수 있습니다.





