(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()); } }