Spring上下文ApplicationContext初始化Bean和事件

ApplicationContext初始化方式

系统创建ApplicationContext容器时,默认就会初始化所有的Bean,注意这里默认初始化得到的Bean都是单例。在一开始就全部加载Bean开销较大,但是由于是单例,之后使用就能够快速得到BeanBeanFactory不会预初始化容器中所有的Bean,它得到的Bean也是单例。

如果不希望Spring容器一开始就初始化某一个Bean,可以在<bean ../>元素指定lazy-init="true",这样只有在需要用到该类时,才初始化。


ApplicationContext事件机制

  1. ApplicationEvent: 容器事件,必须由ApplicationContext发布。
  2. ApplicationListener: 监听器,可由容器中的任何监听器Bean担任。
    事件可以由ApplicationContextpublishEvent()方法发送容器事件,监听器会自动监听。
    例子:
    事件EmailEvent类:
public class EmailEvent extends ApplicationEvent {

    private String address;
    private String text;

    public EmailEvent(Object source) {
        super(source);
    }

    public EmailEvent(Object source, String address, String text) {
        super(source);
        this.address = address;
        this.text = text;
    }
    //...
}

监听器EmailNotifier类:

public class EmailNotifier implements ApplicationListener {
    //容器发生事件时,自动触发该方法
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //判断是说明什么事件
        if(event instanceof EmailEvent) {
            EmailEvent emailEvent = (EmailEvent) event;
            System.out.println("需要发送的邮件地址: " + emailEvent.getText());
            System.out.println("邮件正文: " + emailEvent.getText());
        } else {
            System.out.println("其它事件");
        }
    }
}

将监听器写到配置文件中:

    <!-- 事件的监听器 -->
    <bean class="Event.EmailNotifier"/>

测试代码:

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        EmailEvent emailEvent = new EmailEvent("test", "sweatott@gmail.com", "this is a test");
        context.publishEvent(emailEvent);

控制台信息:

其它事件
需要发送的邮件地址: this is a test
邮件正文: this is a test

监听器成功获取到了发布的事件内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值