商业背景
APP应用程序容器完成启动,扫描特定于容器类的Dubbo服务,并在网关中注册相关元数据。
两个构想
1在容器启动结构元数据中报告网关,影响APP应用的启动性能;
2监听容器启动完成后,向网关报告元数据,无性能影响;
三监听APP启动完成的三种方式
yhdhb、
package com.leadsoft.test.executor.processorpublicclassinstantiationtracingbeanpostprocessorimplementsaplicationtiong 上下文相关事件(event )//需要执行的逻辑代码,在spring容器初始化完成后执行。 }同时,在Spring配置文件中添加注入。
! Spring容器启动完成后,将显示以下bean---- bean class=' com.leadsoft.test.executor.processor.instantiationtracingbeanpostpostppont
一个是根应用程序上下文,
另一个是我们自己的项目名称-服务器上下文(作为rootapplicationcontext的子容器)。
在这种情况下,将执行两次onApplicationEvent方法。
为了避免上述问题,只能在root application context初始化完成后调用逻辑代码。
其他容器初始化完成后,无需执行任何操作即可修改的代码
如下所示。
@ overridepublicvoidonapplicationevent (contextrefreshedeventevent ) { //root application context中没有部件。 他是boss.if (event.getapplicationcontext ).getparent(==null )//必须执行的逻辑代码,在spring容器初始化完成后执行。 }
受伤的巨人、
其实更简单的方法是使用评论。 ` @PostConstruct `,
只需将此注释标记为需要启动时执行的方法。
方法3、
方法实现初始化bean或ServletContextAware