スプリングの中のlifeCycle(ライフサイクル)

6590 ワード

スプリングのライフサイクル
1.       コンテナ起動は、BenFactoyPostProcessorインターフェースを実現したクラスをすべて実用化します.彼はどのような一般的なBeanの実装前にロードされます.
2.       残りのBeanを実装し,これらのBeanに依存注入した.
3.       BeanがBenNameAwareを実現するインターフェースがあるなら、これらのBeanを呼び出します.
4.       BeanがBenFactoryAwareインターフェースを実現しているなら、これらのBeanを呼び出します.
5.       BeanがApplication ContactextAwareインターフェースを実現しているなら、これらのBeanを呼び出します.
6.       BeanPostProcessorのBeanを実現するように構成されているなら、そのpostProcess Before Initiazationを呼び出す方法があります.
7.       ビーンがInitializingBeanインターフェースを実現しているなら、これらのBeanを呼び出します.
8.       Beanがinit属性を持つ場合、その属性に設定された方法を呼び出します.
9.       BeanPostProcessorのBeanを実現するように構成されているなら、そのpostProcess After Initializationを呼び出す方法があります.
10.   Beanは正常に使用されます
11.   DispposableBeanインターフェースのdestoryメソッドを呼び出します.
12.   Bean定義のdestoryメソッドを呼び出します.
 
大まかに値を区別すれば四つの段階に分けられます.
1.       BenFactoyPostProcessorの実例化
2.       Beanを実例化して、いくつかのBenFactoyPostProcessorによって依存注入します.
3.       BeanPostProcessorの呼び出し.Spring内蔵のBeanPostProcessorはBean実現のインターフェースを呼び出します.BeanNameAware、BenFactoryAware、Application ContactAwareなど、内蔵のBeaBenPostProcessorが呼び出しが完了したら、自分の配置したBenPostProcessorを呼び出すことができます.
4.       ビーン焼却段階
package mislay;   
  
import org.springframework.beans.BeansException;   
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;   
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;   
  
public class BeanFactoryPostProcessorTest implements BeanFactoryPostProcessor {   
  
    @Override  
    public void postProcessBeanFactory(   
            ConfigurableListableBeanFactory beanFactory) throws BeansException {   
        System.out.println("--------> begin BeanFactoryPostProcessorTest");   
        String[] names = beanFactory.getBeanDefinitionNames();   
        for (String name : names) {   
            System.out.println("definition bean name:" + name);   
        }   
        System.out.println("
package mislay;   
  
import org.springframework.beans.BeansException;   
import org.springframework.beans.factory.config.BeanPostProcessor;   
  
public class BeanPostProcessorTest implements BeanPostProcessor {   
  
       
    @Override  
    public Object postProcessAfterInitialization(Object bean, String beanName)   
            throws BeansException {   
        System.out.println("call BeanPostProcessor interface postProcessAfterInitialization method; :" + beanName);   
        return bean;   
    }   
  
    @Override  
    public Object postProcessBeforeInitialization(Object bean, String beanName)   
            throws BeansException {   
        System.out.println("call BeanPostProcessor interface postProcessBeforeInitialization method ::" + beanName);   
        if(bean instanceof BeanTest) {   
            System.out.println("bean instanceof BeanTest");   
        }   
        return bean;   
    }   
  
}  
package mislay;   
  
import org.springframework.beans.BeansException;   
import org.springframework.beans.factory.BeanFactory;   
import org.springframework.beans.factory.BeanFactoryAware;   
import org.springframework.beans.factory.BeanNameAware;   
import org.springframework.beans.factory.DisposableBean;   
import org.springframework.beans.factory.InitializingBean;   
import org.springframework.beans.factory.config.BeanPostProcessor;   
import org.springframework.context.ApplicationContext;   
import org.springframework.context.ApplicationContextAware;   
  
public class BeanTest implements InitializingBean, DisposableBean,BeanNameAware,BeanFactoryAware,ApplicationContextAware {   
  
    @Override  
    public void afterPropertiesSet() throws Exception {   
        System.out.println("call InitializingBean interface");   
           
    }   
  
    @Override  
    public void destroy() throws Exception {   
        // TODO Auto-generated method stub   
        System.out.println("call DisposableBean interface");   
    }   
  
    public void _init() {   
        System.out.println("call bean init method");   
    }   
       
    public void _destory() {   
        System.out.println("call bean destory method");   
    }   
       
    public void setSomething(Object something) {   
        System.out.println("DI call setSomething method");   
    }   
       
    public BeanTest() {   
        System.out.println("BeanTest create");   
    }   
  
    @Override  
    public void setBeanName(String name) {   
        // TODO Auto-generated method stub   
        System.out.println("call BeanNameAware interface name is:" + name);   
    }   
  
    @Override  
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {   
        // TODO Auto-generated method stub   
        System.out.println("call BeanFactoryAware interface");   
    }   
       
       
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext)   
            throws BeansException {   
        // TODO Auto-generated method stub   
        System.out.println("call ApplicationContextAware interface");   
    }   
  
}  
package mislay;   
  
import org.springframework.context.ApplicationContext;   
import org.springframework.context.support.AbstractApplicationContext;   
import org.springframework.context.support.ClassPathXmlApplicationContext;   
  
public class Test {   
  
    public static void main(String[] args) {   
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");   
        ((AbstractApplicationContext) context).registerShutdownHook();   
    }   
}  
package mislay;   
  
import org.springframework.context.ApplicationContext;   
import org.springframework.context.support.AbstractApplicationContext;   
import org.springframework.context.support.ClassPathXmlApplicationContext;   
  
public class Test {   
  
    public static void main(String[] args) {   
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");   
        ((AbstractApplicationContext) context).registerShutdownHook();   
    }   
}  
//           
  
  
//              BeanFactoryPostProcessor   
--------> begin BeanFactoryPostProcessorTest   
definition bean name:mislay.BeanFactoryPostProcessorTest   
definition bean name:mislay.BeanPostProcessorTest   
definition bean name:beanTest