1. 程式人生 > >SpringBoot的IOC模組註解及簡單案例(二)

SpringBoot的IOC模組註解及簡單案例(二)

本文將會講到SpringBoot的IOC模組下的註解進行總結,主要目的是為了方便之後查詢註解和快速應用。

將會以:元件註冊,生命週期,屬性賦值,自動裝配來進行區分。

二、生命週期

1、總結:自定義Bean的初始化和銷燬方法     1)、 指定init-method 和 destory-method

    2)、 通過讓 Bean 實現 InitializingBean 介面,定義初始化邏輯                                             DisposableBean 介面,定義銷燬邏輯

    3)、可用 @PostConstruct,在 Bean 建立完成並且賦值完成後,執行該註解標註的方法                      @PreDestroy,在容器銷燬 Bean 之前,執行該註解標註的方法

    4.)、BeanPostProcessor ,在Bean 初始化前後進行一些處理工作               postProcessBeforeInitialization: 在初始化之前工作               postProcessAfterInitialization: 在初始化之後工作  

建立:Bean 建構函式 ——> @PostConstruct ——> InitializingBean 介面 ——> bean 定義的 init-method                ——> postProcessBeforeInitialization ——> Bean 初始化完成 ——> postProcessAfterInitialization ——> 容器建立完成

銷燬:@PreDestroy ——> DisposableBean 介面 ——> bean 定義的 destoryMethod ——> Bean銷燬  

2、示例:

    1)、init-method 和 destory-method

@Configuration
public class MainConfigOfLifeCycle {

        @Bean(initMethod="initTest", destroyMethod="detoryTest")
	public Car car() {
		return new Car();
	}
}
public class Car {
	
	public void initTest() {
		System.out.println(" .. init-method .. ");
	}
	
	public void detoryTest() {
		System.out.println(" .. destory-method .. ");
	}
}

    2)、InitializingBean 和 DisposableBean 介面

@Configuration
public class MainConfigOfLifeCycle {

	@Bean
	public Cat cat() {
		return new Cat();
	}
}
public class Cat implements InitializingBean, DisposableBean {

	
	//該Bean在銷燬時,呼叫
	public void destroy() throws Exception {
		// TODO Auto-generated method stub
		
		System.out.println(" .. DisposableBean .. ");
	}

	//該Bean建立完成並且賦值完成後,呼叫
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		
		System.out.println(" .. InitializingBean .. ");
	}

}

    3)、@PostConstruct 和 @PreDestroy

@Configuration
public class MainConfigOfLifeCycle {

	@Bean
	public Dog dog() {
		return new Dog();
	}
}
public class Dog {

	//物件建立並賦值之後呼叫
	@PostConstruct
	public void init() {
		System.out.println(" .. @PostConstruct .. ");
	}
	
	//容器移除物件之前
	@PreDestroy
	public void detory() {
		System.out.println(" .. @PreDestroy .. ");
	}
	
}

    4)、BeanPostProcessor 介面

@Configuration
public class MainConfigOfLifeCycle {

	@Bean
	public MyBeanPostProcessor myBeanPostProcessor() {
		return new MyBeanPostProcessor();
	}
	
}
public class MyBeanPostProcessor implements BeanPostProcessor {

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		
		System.out.println(" .. postProcessBeforeInitialization .. ");
		
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		// TODO Auto-generated method stub
		
		System.out.println(" .. postProcessAfterInitialization .. ");
		
		return bean;
	}

}