为什么@resource注解不起作用,已经引用了maven包,显示dao层为空,使用@auto wire注解就可以运行
@Resource
注解和 @Autowired
注解都可以用于自动装配依赖项,但它们的工作方式略有不同。
在 Spring 框架中,@Resource
注解使用的是 JSR-250 规范,而 @Autowired
注解使用的是 Spring 框架自己的注解。因此,当您在使用 @Resource
注解时,需要确保您的代码是在支持 JSR-250 标准的环境下运行的。
另外,@Resource
注解默认按照名称进行注入。具体来说,它会从容器中查找一个与其名称相同的 bean 进行注入。如果找不到特定名称的 bean,则会抛出一个异常。因此,需要确保您的 bean 的名称与 @Resource
注解中指定的名称相同。
如果您使用 @Autowired
注解,Spring 会按照类型自动装配依赖项。此外,它还支持按照名称或限定符进行自动装配。具体来说,您可以使用 @Qualifier
注解来指定要注入的 bean 的名称或限定符。
在这种情况下,您提到的使用 @Autowired
注解可以正常工作,可能是因为您的代码不在支持 JSR-250 标准的环境下运行,或者您的 bean 的名称与 @Resource
注解中指定的名称不相同。
如果您确实想要使用 @Resource
注解,您可以尝试将 JSR-250 的依赖项添加到您的项目中,例如在 Maven 中添加以下依赖项:
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
然后,您可以尝试使用以下代码:
@Resource(name="yourDao")
private YourDao dao;
你使用了xml配置的格式注册了bean,需要在userservice对应的bean配置加了property属性,然后指向userDao的bean,然后在userservice实现类中新增setUserDao的方法即可
问题解决了,resource注解在之前引用的是javax.annotation-api,但是随着更新换代,在2018年后这个版本就不再更新了,而是演变成了jakarta.annotation-api,一直更新到现在,也就是说,如果使用resource注解的话需要引入这个,然后就可以使用了