Spring 상용 인터페이스

21030 단어 spring
1.ApplicationContextAware
      응용 프로그램 Context 가 실 행 될 때 이 인 터 페 이 스 를 실현 할 수 있 기 를 기대 합 니 다.
 
/**
 *   Spring ApplicationContextAware  
 * @author zhangwei_david
 * @version $Id: TestApplicationContextAware.java, v 0.1 2015 1 3    11:42:19 zhangwei_david Exp $
 */
@Component
public class TestApplicationContextAware implements ApplicationContextAware {

    /**
     * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        LoggerUtils.info("ApplicationContext runs in");
    }

}

  시작 과정의 로 그 는 다음 과 같 습 니 다.
 
 
   03, 2015 11:46:02    org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
  : Bean 'executor' of type [class org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
   03, 2015 11:46:02    org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
  : Initializing ExecutorService  'scheduler'
   03, 2015 11:46:02    org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker postProcessAfterInitialization
  : Bean 'scheduler' of type [class org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
   03, 2015 11:46:02    org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
  : Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@132c619: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,app,asyncDemo,testClient,testApplicationContextAware,executor,scheduler,org.springframework.context.annotation.internalAsyncAnnotationProcessor,org.springframework.context.annotation.internalScheduledAnnotationProcessor,studentBiz,beforeAdvice,org.springframework.aop.aspectj.AspectJPointcutAdvisor#0,afterAdvice,helloWord,fileCopier,mbeanExporter,assembler,messageSource,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
11:46:02.886 [main] INFO  com.cathy.demo.util.LoggerUtils - ApplicationContext runs in
   03, 2015 11:46:02    org.springframework.context.support.AbstractApplicationContext prepareRefresh
  : Refreshing org.apache.cxf.bus.spring.BusApplicationContext@121202d: startup date [Sat Jan 03 11:46:02 CST 2015]; root of context hierarchy
   03, 2015 11:46:03    org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  : Loading XML bean definitions from class path resource [META-INF/cxf/cxf.xml]
   03, 2015 11:46:03    org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  : Loading XML bean definitions from class path resource [META-INF/cxf/cxf-extension-jaxws.xml]
   03, 2015 11:46:03    org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  : Loading XML bean definitions from class path resource [META-INF/cxf/cxf-extension-soap.xml]
   03, 2015 11:46:03    org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

 
 
2 BeanNameAware
     Bean 이 BeanFactory 에 설 치 된 이름 을 알 고 싶 을 때 이 인 터 페 이 스 를 실현 할 수 있 습 니 다.
 
/**
 *   BeanNameAware  
 * @author zhangwei_david
 * @version $Id: TestBeanNameAware.java, v 0.1 2015 1 3    11:48:50 zhangwei_david Exp $
 */
@Component(value = "hello")
public class TestBeanNameAware implements BeanNameAware {

    private String beanName;

    /**
     * @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
     */
    public void setBeanName(String name) {
        LoggerUtils.info("setBeanName(" + name + ")");
        beanName = name;
    }

    /**
     * Getter method for property <tt>beanName</tt>.
     *
     * @return property value of beanName
     */
    public String getBeanName() {
        return beanName;
    }

}

 결 과 는:
 12:10:47.496 [main] INFO  com.cathy.demo.util.LoggerUtils - setBeanName(hello)
3. InitializingBean
    하면, 만약, 만약... 모든 속성 을 설정 한 후 진일보 한 반응 을 하면 이 인 터 페 이 스 를 실현 할 수 있다.
/**
 *   InitializingBean
 * @author zhangwei_david
 * @version $Id: TestInitializingBean.java, v 0.1 2015 1 3    12:04:38 zhangwei_david Exp $
 */
@Component()
public class TestInitializingBean implements InitializingBean, BeanNameAware {

    private String beanName;

    /**
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    public void afterPropertiesSet() throws Exception {
        LoggerUtils.info("Bean         :" + beanName);
    }

    /**
     * @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
     */
    public void setBeanName(String name) {
        beanName = name;
    }

}

 결 과 는:
12:10:47.496 [main] INFO  com. cathy. demo. util. LoggerUtils - Bean 의 속성 이 모두 설정 되 었 습 니 다. testInitialingBean
   Spring 에 서 는 Bean 의 모든 속성 을 성공 적 으로 설정 한 후에 특정한 행 위 를 수행 하 는 두 가지 방식 이 있 습 니 다. InitializingBean 인 터 페 이 스 를 실현 하 는 것 외 에 Spring 의 설정 파일 에서 init - method 속성 을 지정 할 수 있 습 니 다.그렇다면 이 두 가지 가 동시에 실행 되 는 속성 이 존재 한다 면 어떤 것 일 까?
/**
 *    InitializingBean     
 *
 * @author zhangwei_david
 * @version $Id: MyInitTest.java, v 0.1 2015 6 7    5:46:27 zhangwei_david Exp $
 */

public class MyInitTest implements InitializingBean {

    public MyInitTest() {
        System.out.println("------------MyInitTest        -------------");
    }

    public void init() {
        System.out.println("------------spring    initMethod    -------------");
    }

    /**
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    public void afterPropertiesSet() throws Exception {
        System.out.println("------------InitializingBean.afterPropertiesSet ()     -------------");
    }

}

 
<bean id="myInitTest" class="com.cathy.demo.spring.MyInitTest"
		init-method="init" />

 
log4j:WARN custom level class [#   DEBUG       ] not found.
2015-06-07 17:56:47  [ main:0 ] - [ INFO ]  @TestExecutionListeners is not present for class [class com.cathy.demo.spring.MySpringTest]: using defaults.
2015-06-07 17:56:47  [ main:145 ] - [ INFO ]  Loading XML bean definitions from URL [file:/H:/Alipay.com/workspace4alipay/demo/target/classes/META-INF/spring/test-beans.xml]
2015-06-07 17:56:47  [ main:327 ] - [ INFO ]  JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
2015-06-07 17:56:47  [ main:359 ] - [ INFO ]  Refreshing org.springframework.context.support.GenericApplicationContext@15f7ae5: startup date [Sun Jun 07 17:56:47 CST 2015]; root of context hierarchy
2015-06-07 17:56:47  [ main:472 ] - [ INFO ]  Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2db087: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
------------MyInitTest        -------------
------------InitializingBean.afterPropertiesSet ()     -------------
------------spring    initMethod    -------------
2015-06-07 17:56:47  [ Thread-0:493 ] - [ INFO ]  Closing org.springframework.context.support.GenericApplicationContext@15f7ae5: startup date [Sun Jun 07 17:56:47 CST 2015]; root of context hierarchy
2015-06-07 17:56:47  [ Thread-0:494 ] - [ INFO ]  Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2db087: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy

 로그 에서 알 수 있 듯 이 그들의 실행 순 서 는... afterPropertiesSet()->initMethod()
 
     주 해 를 사용 하 는 방식 으로 initMehthod 를 지정 하 는 방식 은 initMethod () 에 @ PostConstruct 를 추가 하 는 것 입 니 다. 이때 의 집행 순 서 는 이 렇 습 니까?아래 테스트 를 살 펴 보 겠 습 니 다. Spring 설정 파일 에는 bean 설정 이 없습니다.
/**
 *    InitializingBean     
 *
 * @author zhangwei_david
 * @version $Id: MyInitTest.java, v 0.1 2015 6 7    5:46:27 zhangwei_david Exp $
 */
@Component
public class MyInitTest implements InitializingBean {

    public MyInitTest() {
        System.out.println("------------MyInitTest        -------------");
    }

    @PostConstruct
    public void init() {
        System.out.println("------------spring    initMethod    -------------");
    }

    /**
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    public void afterPropertiesSet() throws Exception {
        System.out.println("------------InitializingBean.afterPropertiesSet ()     -------------");
    }

}

 결 과 는:
 
2015-06-07 18:09:44  [ main:0 ] - [ INFO ]  @TestExecutionListeners is not present for class [class com.cathy.demo.spring.MySpringTest]: using defaults.
2015-06-07 18:09:44  [ main:136 ] - [ INFO ]  Loading XML bean definitions from URL [file:/H:/Alipay.com/workspace4alipay/demo/target/classes/META-INF/spring/test-beans.xml]
2015-06-07 18:09:44  [ main:311 ] - [ INFO ]  JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
2015-06-07 18:09:44  [ main:346 ] - [ INFO ]  Refreshing org.springframework.context.support.GenericApplicationContext@15f7ae5: startup date [Sun Jun 07 18:09:44 CST 2015]; root of context hierarchy
2015-06-07 18:09:44  [ main:480 ] - [ INFO ]  Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1fe3806: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
------------MyInitTest        -------------
------------spring    initMethod    -------------
------------InitializingBean.afterPropertiesSet ()     -------------
2015-06-07 18:09:44  [ Thread-0:500 ] - [ INFO ]  Closing org.springframework.context.support.GenericApplicationContext@15f7ae5: startup date [Sun Jun 07 18:09:44 CST 2015]; root of context hierarchy
2015-06-07 18:09:44  [ Thread-0:501 ] - [ INFO ]  Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1fe3806: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy

 
4. BeanPostProcessor
   BeanPostProcessor BeanFactory 의 갈고리 입 니 다. 고객 이 새로 만 든 Bean 을 수정 할 수 있 도록 해 줍 니 다.
 
/**
 * Test BeanPostProcessor
 * @author zhangwei_david
 * @version $Id: TestBeanPostProcessor.java, v 0.1 2015 1 3    12:14:32 zhangwei_david Exp $
 */
@Component
public class TestBeanPostProcessor implements BeanPostProcessor {

    /**
     * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object, java.lang.String)
     */
    public Object postProcessBeforeInitialization(Object bean, String beanName)
                                                                               throws BeansException {
        LoggerUtils.info("bean       :bean=" + bean + ", beanName" + beanName);
        return bean;
    }

    /**
     * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, java.lang.String)
     */
    public Object postProcessAfterInitialization(Object bean, String beanName)
                                                                              throws BeansException {
        LoggerUtils.info("bean       :bean=" + bean + ", beanName" + beanName);
        return bean;
    }

}

 결 과 는:
12:16:06.314 [main] INFO  com.cathy.demo.util.LoggerUtils - ApplicationContext runs in12:16:06.314 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 전 호출: bean = com. cathy. demo. test.TestApplicationContextAware@f70944, beanNametestApplicationContextAwareafter test for AOP   postProcessBeforeInitialization12:16:06.330 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 후 호출: bean = com. cathy. demo. test.TestApplicationContextAware@f70944, beanNametestApplicationContextAwareafter test for AOP   postProcessAfterInitialization12:16:06.330 [main] INFO  com.cathy.demo.util.LoggerUtils - setBeanName(hello)12:16:06.330 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 전 호출: bean = com. cathy. demo. test.TestBeanNameAware@a6bea6, beanNamehelloafter test for AOP   postProcessBeforeInitialization12:16:06.330 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 후 호출: bean = com. cathy. demo. test.TestBeanNameAware@a6bea6, beanNamehelloafter test for AOP   postProcessAfterInitialization12:16:06.330 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 전 호출: bean = com. cathy. demo. test.TestInitializingBean@1b21bd3, beanNametestInitializingBeanafter test for AOP   postProcessBeforeInitialization12:16:06.330 [main] INFO  com. cathy. demo. util. LoggerUtils - Bean 의 속성 이 모두 설정 되 었 습 니 다. testInitialingBean 12: 16: 06.346 [main] INFO  com. cathy. demo. util. LoggerUtils - bean 초기 화 후 호출: bean = com. cathy. demo. test.TestInitializingBean@1b21bd3, beanNametestInitializingBeanafter test for AOP   postProcessAfterInitialization
 
/**
 *    InitializingBean     
 *    BeanPostProcessor  
 *
 * @author zhangwei_david
 * @version $Id: MyInitTest.java, v 0.1 2015 6 7    5:46:27 zhangwei_david Exp $
 */
@Component
public class MyInitTest implements InitializingBean, BeanPostProcessor {

    private Person man;

    public MyInitTest() {
        System.out.println("------------MyInitTest        -------------");
    }

    @PostConstruct
    public void init() {
        System.out.println("------------spring    initMethod    -------------");
    }

    /**
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    public void afterPropertiesSet() throws Exception {
        System.out.println("------------InitializingBean.afterPropertiesSet ()     -------------");
    }

    /**
     * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(java.lang.Object, java.lang.String)
     */
    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("--------- " + beanName
                           + "        postProccessBeforeInitializaiton--------");
        return bean;
    }

    /**
     * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, java.lang.String)
     */
    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
        System.out.println("--------- " + beanName
                           + "         postProcessAfterInitialization--------");
        return bean;
    }

    /**
     * Setter method for property <tt>man</tt>.
     *
     * @param man value to be assigned to property man
     */
    @Autowired
    public void setMan(Person man) {
        System.out.println("      man=" + man.getSex());
        this.man = man;
    }

}

 
 
------------MyInitTest        -------------
2015-06-07 18:49:55  [ main:480 ] - [ INFO ]  Bean 'man' of type [class com.cathy.demo.spring.Man] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
      man=Male
------------spring    initMethod    -------------
------------InitializingBean.afterPropertiesSet ()     -------------
2015-06-07 18:49:55  [ main:492 ] - [ INFO ]  Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@de0926: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,man,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
--------- com.cathy.demo.spring.MySpringTest        postProccessBeforeInitializaiton--------
--------- com.cathy.demo.spring.MySpringTest         postProcessAfterInitialization--------
2015-06-07 18:49:55  [ Thread-0:506 ] - [ INFO ]  Closing org.springframework.context.support.GenericApplicationContext@115b42e: startup date [Sun Jun 07 18:49:55 CST 2015]; root of context hierarchy
2015-06-07 18:49:55  [ Thread-0:507 ] - [ INFO ]  Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@de0926: defining beans [org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,myInitTest,man,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy

좋은 웹페이지 즐겨찾기