首页 > 编程语言 > 详细

Spring 之常用接口

时间:2015-01-04 02:04:11      阅读:485      评论:0      收藏:0      [点我收藏+]

?? 1.ApplicationContextAware

????? 任何期望在ApplicationContext运行的时候被通知到都可以实现该接口

?

/**
 * 测试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

????如果期望在BeanFactory?设置所有的属性后作出进一步的反应可以实现该接口

/**
 * 测试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的属性都被设置完成:testInitializingBean

?

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 in
12:16:06.314 [main] INFO? com.cathy.demo.util.LoggerUtils - bean初始化之前调用:bean=com.cathy.demo.test.TestApplicationContextAware@f70944, beanNametestApplicationContextAware
after test for AOP?? postProcessBeforeInitialization
12:16:06.330 [main] INFO? com.cathy.demo.util.LoggerUtils - bean初始化之后调用:bean=com.cathy.demo.test.TestApplicationContextAware@f70944, beanNametestApplicationContextAware
after test for AOP?? postProcessAfterInitialization
12: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, beanNamehello
after test for AOP?? postProcessBeforeInitialization
12:16:06.330 [main] INFO? com.cathy.demo.util.LoggerUtils - bean初始化之后调用:bean=com.cathy.demo.test.TestBeanNameAware@a6bea6, beanNamehello
after test for AOP?? postProcessAfterInitialization
12:16:06.330 [main] INFO? com.cathy.demo.util.LoggerUtils - bean初始化之前调用:bean=com.cathy.demo.test.TestInitializingBean@1b21bd3, beanNametestInitializingBean
after test for AOP?? postProcessBeforeInitialization
12:16:06.330 [main] INFO? com.cathy.demo.util.LoggerUtils - Bean的属性都被设置完成:testInitializingBean
12:16:06.346 [main] INFO? com.cathy.demo.util.LoggerUtils - bean初始化之后调用:bean=com.cathy.demo.test.TestInitializingBean@1b21bd3, beanNametestInitializingBean
after test for AOP?? postProcessAfterInitialization

?

?

Spring 之常用接口

原文:http://zhangwei-david.iteye.com/blog/2172165

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!