Java Spring注释@Inject';行不通
我的代码Java Spring注释@Inject';行不通,java,spring,Java,Spring,我的代码@Inject在一个类中有效,但在另一个类中无效。 这是我的密码: context.xml SellerRetriever.java 公共类SellerRetriever{ @注入 UserDAO UserDAO; ... ... } UserDAO类存在于com.myfashions.dao包中。 @Inject在Seller.java中不起作用。任何原因?要符合扫描条件,必须使用更通用的@组件或@Service或@Repositories等对类进行注释。。在您的情况下,
@Inject
在一个类中有效,但在另一个类中无效。
这是我的密码:
- context.xml
- SellerRetriever.java
公共类SellerRetriever{
@注入
UserDAO UserDAO;
...
...
}
UserDAO
类存在于com.myfashions.dao
包中。
@Inject
在Seller.java中不起作用。任何原因?要符合扫描条件,必须使用更通用的@组件或@Service
或@Repositories
等对类进行注释。。在您的情况下,@Service
在逻辑上更适合您。
然后,您可以(如果需要的话)定义一些专门针对服务调用的方面(AOP)
此外,您可能希望使用@Autowired
而不是@Inject
来检索bean
有关这两种注释的差异的更多信息,请参见:
您可以在下面看到我的评论,其中解释了保留@Autowired
而不是@Inject
的一个很好的理由,请确保SellerRetriever
和UserDAO
的实现都对组件扫描进行了注释。这将确保将后者注入前者:
@Service
public class SellerRetriever {
@Inject
UserDAO userDAO;
...
}
用@Component
注释UserDAO
实现
扫描多个路径时,请使用:
<context:component-scan base-package="com.myfashions.services, com.myfashions.dao"/>
我发现了我的错误,我发布这篇文章是因为万一有人有同样的问题。我使用new运算符创建SellerRetriver对象。如果使用新操作符调用特定类,Inject将不起作用。这是一个很好的答案,但我仍然得到了NullPointerException。我想您可以将@Inject
或@Autowired
与组件扫描
结合使用。。。只要您使用的是Spring 3.add@Component或@Service或@Repositories在您的类声明之上,否则它将不会被扫描。@Mik378这是一个用例,Spring 2和3之间的遗留支持。问题没有提到这样的要求,但是可以。还有其他一些事情可能会让您远离@Autowired
,比如希望使用注释按名称将bean连接起来。在这种情况下,Spring建议您使用@Resource
()。您可能还希望转向Java标准(如@Inject
),以防切换到不同的依赖项注入框架。由于@Inject
是Java注释,@Autowired
是spring depdendant,如果您想要更改DI-framework,则@Inject
具有优势。UserDAO正在其他服务类中被注入,而不是在SellerRetriever.javaI中。我假设com.myfashions.services
中的SellerRetriever
。尝试在应用程序中使用单个组件扫描标记context@Reimeus这是一个有趣的建议。Spring是否可以执行第一次组件扫描并错过UserDAO
,因为它在第二次组件扫描之前都没有找到它?@davidfmatheson-TBH两者都是等效的,只是一个首选项。怀疑这里的问题可能是旧的类版本。重建应确定是否为卖家
管理的Spring类?或者你是用新的操作符创建的?谢谢@nicholas.hauschild你让我知道了我的错误。我用新操作符创建了那个对象。这就是我得到所有注入的原因空@Inject
不是spring注释