protected void doTestEvents(TestListener listener, TestListener parentListener, MyEvent event) { listener.zeroCounter(); parentListener.zeroCounter(); assertTrue("0 events before publication", listener.getEventCount() == 0); assertTrue("0 parent events before publication", parentListener.getEventCount() == 0); this.applicationContext.publishEvent(event); assertTrue("1 events after publication, not " + listener.getEventCount(), listener.getEventCount() == 1); assertTrue("1 parent events after publication", parentListener.getEventCount() == 1); }
@Test public void testExpectedBehavior() throws Exception { TestBean target = new TestBean(); final TestListener listener = new TestListener(); class TestContext extends StaticApplicationContext { @Override protected void onRefresh() throws BeansException { addApplicationListener(listener); } } StaticApplicationContext ctx = new TestContext(); MutablePropertyValues pvs = new MutablePropertyValues(); pvs.add("applicationEventClass", TestEvent.class.getName()); // should automatically receive applicationEventPublisher reference ctx.registerSingleton("publisher", EventPublicationInterceptor.class, pvs); ctx.registerSingleton("otherListener", FactoryBeanTestListener.class); ctx.refresh(); EventPublicationInterceptor interceptor = (EventPublicationInterceptor) ctx.getBean("publisher"); ProxyFactory factory = new ProxyFactory(target); factory.addAdvice(0, interceptor); ITestBean testBean = (ITestBean) factory.getProxy(); // invoke any method on the advised proxy to see if the interceptor has been invoked testBean.getAge(); // two events: ContextRefreshedEvent and TestEvent assertTrue("Interceptor must have published 2 events", listener.getEventCount() == 2); TestListener otherListener = (TestListener) ctx.getBean("&otherListener"); assertTrue("Interceptor must have published 2 events", otherListener.getEventCount() == 2); }