最近在搭建ssm框架时,发现了一个关于Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER, type=class java.lang.Object, mappedName=)}的异常,网上也找了许多解决方式,经我一一试错后发现都无法解决本项目的异常,经自己研究后发现了一种解决方案,目前已成功将问题解决,在此处记录一下,以下为正文:
原始的配置文件为:
<!-- 扫描@Service注解 service层-->
<context:component-scan base-package="com.**.service" />
<!-- 扫描@Repository注解 dao层-->
<context:component-scan base-package="com.**.dao" />
<!-- 自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller等这些注解的类,则把这些类注册为bean -->
<context:component-scan base-package="com.**.controller">
<!-- context:include-filter对于include,我的理解是,除了扫描base-package包下面的子类,还扫描expression后面的包。
context:exclude-filter对于exclude,我认为,即使expression后面的包在base-package下面,也不扫描 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
经过逐一排查,发现报错位置为在service层代码里注入dao无法成功,代码如下:
@Resource
private IUserDao userDao;
此时启动项目后,报以上错误。将配置文件中的dao层配置修改为
<!-- Mapper接口所在包名,Spring会自动查找其下的Mapper -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.user.dao" />
</bean>
别的配置不变,启动项目后,问题解决。