(1)定义一个Animal类,在该类中定义一个speak方法,然后监视该方法
(2)定义一个AnimalSpeakEvent方法,该方法继承ApplicationEvent,重载其默认的构造方法.当用户调用Animal类中speak方法时触发该事件
(3)写一个监听类AnimalEventListener 实现ApplicationListener,并在配置文件中配置该监听器
public class AnimalSpeakEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; private String animalName; public AnimalSpeakEvent(Object source) { super(source); } public AnimalSpeakEvent(Object source,String animalName) { super(source); this.animalName=animalName; } public String getAnimalName() { return animalName; } }
public class AnimalEventListener implements ApplicationListener{
@Override
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof AnimalSpeakEvent){
AnimalSpeakEvent a=(AnimalSpeakEvent)event;
System.out.println(this.getClass().getSimpleName()+"有一个动物在讲话,它的名字是"+a.getAnimalName());
}
}
}
public class Animal implements ApplicationContextAware{
private ApplicationContext ac;
private String name;
private int age;
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
this.ac=context;
}
public String speak(){
ac.publishEvent(new AnimalSpeakEvent(this, this.name));
return ("我的名字是:"+this.name+",我的年龄是:"+this.age);
}
public ApplicationContext getAc() {
return ac;
}
public void setAc(ApplicationContext ac) {
this.ac = ac;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Test3 { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("config/applicationContext.xml"); Animal animal=(Animal)context.getBean("animal"); System.out.println(animal.speak()); } }