라이프 사이클
만들기 ----> 초기화 ---> 파괴
1. 객체의 예로
2. 세터 주입 실행 콩 의존성 주입 특성
인터페이스 메소드가 실행되는 setBeanName 달성하는 경우 3. setBeanName ()를 BeanNameAware
인터페이스 메소드가 실행되는 setBeanFactory 달성되면)합니다 (setBeanFactory를 4.BeanFactoryAware
프로세서에 연결된 경우 5. BeanPostProcessor processBeforeInitialization (), 이는 본 예 processBeforeInitialization 콩 초기화하기 전에 실행될 것이다 () 메소드
인터페이스가 afterPropertiesSet ()를 실행하는 경우에 달성된다 6. afterPropertiesSet ()를 InitializingBean 표시. 초기화 메소드에 정의 된 Bean 정의 파일
연관된 프로세서가 있다면 processAfterInitialization ()의 7.BeanPostProcessors는, 그 빈 초기화 전에이 인스턴스 processAfterInitialization을 수행한다 () 메소드
32 파괴의 8.DisposeablebBean () 컨테이너가 닫힐 때 콩이 인터페이스를 구현하는 경우, 그 32 파괴를 수행 () 메소드
제 정의 파일 컨테이너가 닫힐 때, 정의 파일에 정의 된 방법 콩 "32 파괴 - 방법"을 사용할 수있다 콩 파괴 메소드를 정의
참고 :
케리을 사랑 할 때 컨테이너의 기본 1. 싱글의 경우는 초기화
객체의 각각의 경우 2 때 콩이 초기화 얻을 것이다
모든 설정 방법이 구현 된 내부의 객체가 생성 된에 콩 초기화 의미합니다. 특정 실행에있어서
@Bean (initMethod, 32 파괴)는 빈에서의 이러한 두 가지 방법을 만드는 동시에 초기화 파괴 방법을 지정
초기화 전이나 생성자 후 실행? 인수가없는 생성자! 오브젝트는 처음으로 초기화 이후에 생성! 인수가없는 생성자의 첫 번째 구현 그래서!
위의 과정을 보충 :
> 초기화 (사용자 정의 init 메소드) - -> 파괴 콩 (생성자 실행) 생성
싱글 톤 객체를 파괴하기 close () 메소드를 호출
참고 : IOC 컨테이너 스토리지를 사용지도 객체와 함께, 분명 () 클리어 객체
원본을 봐 :
보기 입력 :
보기를 계속 클릭
첫 번째보기 :
지속적인 추적 관찰 후 명확한 방법은의 모음입니다
우리는 특정 클래스를 달성하기 위해 초기화 작업을 통해 갈 수 있습니다!
사용하는 방법을 개발 :
방법 A는 : @Bean에 의해 초기화 메소드와 32 파괴-방법을 지정합니다
방법 2 : 콩 구현 InitializingBean 표시 (정의 초기화 로직), DisposableBean 표시를 (정의 된 로직을 파괴) 시켜서
방법 세 : 초기화 방법을 수행하기 위해, 콩에서 생성 및 할당이 완료 : @PostConstructo 다음 JSR250 (자바 사양이 아닌 봄)를 사용합니다. @PreDestory : 컨테이너가 Bean을 파괴하기 전에 우리가 청소 작업 할 수
방법 2 :
콩:
@Component public class LifeBean implements InitializingBean, DisposableBean { //构造函数 public LifeBean() { System.out.println("LifeBean Constructor"); } /** 接口InitializingBean的方法 * //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法 即: (afterPropertiesSet)中文:set方法都走完了时候执行该方法 * @throws Exception */ @Override public void afterPropertiesSet() throws Exception { //等同于 @Bean(init =" ") //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法 System.out.println("LifeBean ********> 【InitializingBean.afterPropertiesSet】 "); } /** * 接口DisposableBean 的方法 * @throws Exception */ @Override public void destroy() throws Exception { System.out.println("LifeBean ********>【DisposableBean.destroy】"); } }
配置和扫包
@Configuration @ComponentScan("com.toov5.config.beanTest.entity") public class MyConfig { }
启动测试:
public class test { public test(){ } public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext("com.toov5.config"); applicationContext1.close(); // System.out.println(applicationContext1); } }
方法三
注解代替了接口:
Bean:
@Component public class LifeBean { //构造函数 public LifeBean() { System.out.println("LifeBean Constructor"); } @PostConstruct public void afterPropertiesSet() throws Exception { //等同于 @Bean(init =" ") //解释 对象有创建 肯定也有给属相赋值的过程!,对象赋值完毕以后才执行该方法 System.out.println("LifeBean ********> 【InitializingBean.afterPropertiesSet】 "); } @PreDestroy public void destroy() throws Exception { System.out.println("LifeBean ********>【DisposableBean.destroy】"); } }
效果是一样的:
Spring Bean生命周期中的后置处理器: BeanPostProcessor接口
过滤器中,不可以使用注解方式获取Bean对象。 做法: 单独获取上下文ApplicationContext
后置处理器,实现对Bean初始化增强功能
@Component public class MyApplicationContext implements ApplicationContextAware { //开发时候经常做成全局的 进行使用 private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { LifeBean lifeBean = applicationContext.getBean("lifeBean", LifeBean.class); System.out.println("result————————————————————"+lifeBean.toString()); } }
运行后:结果是没问题的