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注释