ApplicationContextAware接口提供了publishEvent方法,实现了Observe(观察者)设计模式的传播机制,实现了对bean的传播
新增要操作的对象bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import org.springframework.context.ApplicationEvent; public class AddEvent extends ApplicationEvent{ private String name; public AddEvent(Object source,String name) { super (source); this .name = name; } public String getName() { return name; } public void setName(String name) { this .name = name; } } |
再增加监听事件
1 2 3 4 5 6 7 8 9 10 11 12 | public class AddListener implements ApplicationListener{ @Override public void onApplicationEvent(ApplicationEvent paramE) { if (!(paramE instanceof AddEvent)){ return ; } AddEvent se = (AddEvent) paramE; System.out.println( "执行方法:" +se.getName()); } } |
增加*.xml
<bean id="AddBean" class="com.tdtech.eplatform.gatekeeper.bootstrap.A.Test"></bean>
<bean id="AddListener" class="com.tdtech.eplatform.gatekeeper.bootstrap.A.AddListener"></bean>
增加测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class Test implements ApplicationContextAware{ /** * 定义Spring上下文对象 */ private ApplicationContext m_applicationContext = null ; public void setApplicationContext(ApplicationContext _applicationContext) throws BeansException { this .m_applicationContext = _applicationContext; } public void addStudent(String _sStudentName) { // 1.构造一个增加学生的事件 AddEvent aStudentEvent = new AddEvent( m_applicationContext, _sStudentName); // 2.触发增加学生事件 m_applicationContext.publishEvent(aStudentEvent); } public static void main(String[] args) { String[] xmlConfig = new String[] { "classpath:spring/test_spring.xml" }; // 使用ApplicationContext来初始化系统 ApplicationContext context = new ClassPathXmlApplicationContext( xmlConfig); Test studentBean = (Test) context .getBean( "AddBean" ); studentBean.addStudent( "我是第一个学生" ); studentBean.addStudent( "第二个学生已经添加" ); } } |
分类:
spring
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 如何打造一个高并发系统?