Spring框架 - 自定义事件处理

时间:2018-01-07 13:22:13

标签: java spring dependency-injection

在下面的代码中,

package com.ca.spring;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;

public class MyEventPublisher implements ApplicationEventPublisherAware{

    private ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    public void publish() {
        System.out.println("MyEventPublisher.publish() invoked ... ");
        applicationEventPublisher.publishEvent(new MyEvent(this));
    }
}
package com.ca.spring;

import org.springframework.context.ApplicationEvent;

public class MyEvent extends ApplicationEvent{

    private static final long serialVersionUID = 1L;

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

}
package com.ca.spring;

import org.springframework.context.ApplicationListener;

public class MyEventListener implements ApplicationListener<MyEvent>{

    @Override
    public void onApplicationEvent(MyEvent e) {
        System.out.println("MyEventListener.onApplicationEvent() invoked: " + 
                                e.getSource().getClass().getName());        
    }

}
package com.ca.spring;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringApp {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml"); 
        ((MyEventPublisher)context.getBean("myEventPublisher")).publish();
        context.close();
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<!--  Springbeans.xml  -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="myEventPublisher" class="com.ca.spring.MyEventPublisher"/>
    <bean id="myEventListener" class="com.ca.spring.MyEventListener"/>
</beans>

1)Spring框架向setApplicationEventPublisher()注入了哪个对象?因为xml

中没有提到myEventPublisher bean的依赖项

2)Spring框架如何决定注入该特定对象?

0 个答案:

没有答案