记录一次排除Bean加载问题
作者:互联网
谁无暴风劲雨时,守得云开见月明
记录一次Bean加载问题。
最近因为工作和生活的原因一直没有时间去做内容输出,国庆假期悠闲一些,记录一次我排除Bean加载问题的解决思路。
由于接手了一个全新的项目,这个项目对spring做了许多的扩展,在摸清整个框架机制准备进行测试的时候我发现我写的bean
文件没有生效,applicationcontext.getBean(beanname,class<?> T)
,我当时就懵了,很简单的bean注解怎么会没有生效呢?有多简单呢大致就这样。
@Component("A-XXXX")
public class A {
只要接触过java的同学都知道这会注入spring单例容器中进行管理。因为整个框架是公司的源码自己写的扩展。我当时第一反应有我没有读到的源码,肯定有其他的地方扩展。
第一回合
在上面描述的思想下,我坚信没有读到的忽略的源码,肯定是自己去维护了一套mapbean对象,便开始找XXXXXXaware
的spring扩展接口,看有没有bean定义前后之后做处理的。浪费了几十分钟,什么都没找到。
第二回合
在上面浪费了几十分钟后,没有一丝思路我遍放弃了,开始换了思路,会不会我的注解没有生效?我回头检查了我的构造函数,好家伙发现写成了protected
,spring需要public
的构造器才能注入,因此我将这个问题改掉,满怀信心的改掉,运行。心想肯定启动成功,中间还上了一次厕所。
@Component("A-XXXX")
public class A {
@Autowired
public A(){}
}
第三回合
上厕所回来发现,还是找不到Bean定义对象。这次把我傻眼了感觉碰到了知识盲区,开始了怀疑自己自己阶段,自己则创建了个简单项目做spring注入的测试发现public可以注入的protected不可以注入。之后遍开始求助论坛,在寻找论坛的过程中回想自己还没有什么是拉下,后面想起是maven,项目没有install。maven是用到本地仓库,编译的时候虽然大家能够调用,但是运行的时候是本地仓库的代码。没有生成jar包自然而然则不能加载对象。当时就说自己一遭。
虽然这个问题很简单,但是确实是花了不好时间去排查问题,当吃了一次亏吧。写出来让大家不要踩坑。另外打包的时候尽量用install少用package吧,package不会替换掉原来的老jar包。
标签:spring,bean,排除,Bean,源码,public,加载 来源: https://blog.csdn.net/qq_35059264/article/details/120627759