一、异常现象:
30-Dec-2024 16:56:88.562 重大 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.Standardcontext.startInternal 一个或多个listeners启动失败
原始配置及代码:
1、web.xml
配置spring-context.xml以及ContextLoaderListener
2、spring-context.xml
配置了ApplicationContextAware实现类的bean:springContext
3、ApplicationContextAware实现类的代码SpringContext,重写destroy和setApplicationContext
二、原因查找与解决
1、查看pom版本依赖,跟别人正常运行的版本对比了,没有问题。
于是使用异常log在网上各种找有没有解决方案,没找到完全一致的,于是使用AI工具通义灵码问,终于发现端倪。如下:
①、配置web.xml,跟我的配置一致,没问题,不贴图了。
②、配置spring-context.xml,这里跟我的方式就不一致了,使用的自动注册bean,启用组件扫描的方式。
③、确保你的实现类使用了@Component
或类似的注解,以便Spring能够识别并管理这个Bean。
尝试重启Tomcat,不再出异常,并且功能可以正常使用。
于是确定以上自动注册bean方法可以解决 (案一)。
三、反思
为什么同样都是bean注入,自动注册的好使,而我之前的依赖注入的不好用呢。
<bean id="springContext" class="com.kevin.my.shop.commons.context.SpringContext"/>
而且通过自动注入启动成功,且功能正常使用,说明依赖注入的另外两个bean是可用的。
<bean id="userDao" class="com.kevin.my.shop.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.kevin.my.shop.service.impl.UserServiceImpl"/>
于是怀疑是依赖注入的bean顺序不对导致的,尝试把 springContext的Bean放置在最上面。
如下:
并且删掉@Component注解。
再度重启Tomcat,不再出异常,并且功能可以正常使用。
于是确定以上依赖注入bean方法也可以使用 ,要注意依赖注入bean的顺序问题(案二)。