Spring学习-InitializingBean,ApplicationContextWare

Spring这个框架断断续续用了几年,但是很多其中的机制并没有完全理解透彻,现在抽出时间系统整理一下相关知识点,也是为自己的技术进行总结!

InitailizingBean
  1. 这个接口 InitailizingBean中只有一个方法,就是afterPropertiesSet。该方法是指Spring容器在启动后主动调用该接口的方法。
  2. 如果一个Bean实现了InitializingBean,则该方法会在容器实例化该Bean,初始化Bean的属性完毕之后,再调用afterPropertiesSet方法。
  3. afterPropertiesSet通过方法名称即可知道含义:在bean的属性设置完毕后调用该方法。
  4. 接口InitializingBean接口源码如下:
public interface InitializingBean {

    /**
     * 当Bean的属性被设置完毕后,由BeanFactory调用该方法。
     * 该方法允许bean的实例去执行一些初始化动作,当所有的bean属性完成设置之后执        *行。
     */
    void afterPropertiesSet() throws Exception;

}
ApplicationContextWare
  1. 看名称带Aware,就可以知道这个接口由Spring容器主动通知调用。Spring容器在通知该接口的实现类时,会将上下文ApplicationContext注入进来。
  2. 改接口中就一个方法:
  3. void setApplicationContext(ApplicationContext applicationContext) throws BeansException
  4. 即容器启动后,将ApplicationContext 注入到该方法中。
实例代码示例
public class AccountServiceContext implements ApplicationContextAware,InitializingBean,DisposableBean {

    private transient ApplicationContext applicationContext;

    private String serviceName;

    public AccountServiceContext(){
        System.out.println("constructor execute! ");


    }

    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        this.applicationContext = applicationContext;
        System.out.println("Spring容器主动调用ApplicationContextAwar接口,将ApplicationContext加载 : "+applicationContext);

    }
    public void afterPropertiesSet() throws Exception {
         System.out.println("*****afterPropertiesSet method execute!*****");
         System.out.println("属性值是 : "+this.getServiceName());
         this.setServiceName("初始化数据库连接");
    }

    public void destroy() throws Exception {
         System.out.println("*****destroy method execute!*****");
    }

    public String getServiceName() {
        return serviceName;
    }

    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }   
}
  1. 配置文件如下:
<bean id="accountServiceContext" class="com.egfbank.spring.AccountServiceContext" >
        <property name="serviceName" value="initialService"/>
</bean>
  1. 测试代码如下:
public class SpringEventAwareContextTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:/config/spring-event-study.xml");
        context.start();
        AccountServiceContext service = context.getBean(AccountServiceContext.class);
        System.out.println(service.getServiceName());
    }
}
  1. 执行结果如下:

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值