4
回答
spring注解的bean,ApplicationContextAware里没有找到

之前我的bean都是通过xml声明的,有一个实现了ApplicationContextAware接口的类。用于在JSP等情况下获取spring容器里的bean。一直以来都没有问题。
最近我通过注解声明了bean,直接运行是有效的,也注入成功了。但是用那个实现了ApplicationContextAware接口的类,打印出所有bean,就没有注解声明的哪些类,不知道为什么。请高人指点一下。感激。

举报
yszoe
发帖于6年前 4回/5K+阅

以下是问题补充:

  • @yszoe :这个问题,直接导致我集成struts2的时候,action使用@Controller注解后,运行说找不到类。规则都没有问题,移到XML里声明这个action,也能找到,郁闷了。 (6年前)
共有4个答案 最后回答: 6年前

我知道我的问题在哪里了。

是因为spring mvc里声明的bean,和web.xml里载入的spring 配置文件里的bean,默认不在一个上下文。

我现在把所有service等(除了controller类)全都放普通spring配置文件。只有spring mvc的controller类配置在springmvc-servlet.xml文件里。

这样struts2可以使用全局上下文里的bean,而sprin mvc的controller也可以在全局上下文找到service类。

我原来是简单的把springmvc-servlet.xml在web.xml里又声明载入一次。这样虽然能解决找类的问题,但是会让springmvc-servlet.xml里的bean存在两份实例。

晕,折腾了一天,才发现,我扫描注解的类写在springmvc-serlvet.xml里的,这个文件是自动载入的,没有在web.xml里声明载入。
把springmvc-serlvet.xml在web.xml里的contextConfigLocation声明下,注解的类就能在上下文找到了。
但是springmvc,我没有声明,也一样能用这些注解的类~~~

我想在有些普通的java类中获取相关bean,所有的bean我都是采用注解的方式,出现了和你一样的情况,返回的 ApplicationContext一直为null,mvc我也确实声明在 contextConfigLocation下,目前问题还没有解决,纠结啊!LZ有其他解决办法吗?
顶部