【问题标题】:@Inject , @AutoWired, @Resource & @ManagedProperty : which one should I use ,where and when?@Inject、@AutoWired、@Resource 和 @ManagedProperty:我应该使用哪一个,何时何地?
【发布时间】:2014-09-10 15:11:49
【问题描述】:

我正在将 Hibernate、Spring 和 JSF 用于应用程序。 我实际上正在使用带有 Jersey(JAX-RS) 的 Restfull WebService 来改进应用程序。为此,我用@Component 注释了我的类。在这个类中,我需要调用一个服务来从数据库中获取一些东西。

@Component
@Path("/Graphic")
public class GraphicService {

    //@Autowired //@Inject
    //ParticipantBo participantBo;

    or       

    //@ManagedProperty("#{participantBo}")
    //private ParticipantBo participantBo;

我在教程中遇到了一些我不太了解/理解其含义的注释。 所以我想检查一下我的整个应用程序的配置是否正常,或者我是否可以清理一些东西。

大多数时候,我使用@ManagedProperty 注释在我的类中包含一个使用@ManagedBean 注释的依赖项(一个ServiceBO,然后调用一个Dao)。

@ManagedBean(name="participantController")
@ViewScoped
public class AddParticipantBean  implements Serializable{


    private static final long serialVersionUID = -6952203235934881190L;

        @ManagedProperty(value="#{participantBo}")
        ParticipantBo participantBo;
}

我有一个 applicationContext.xml 文件,我在其中声明所有类:

 <!-- Participant Data Access Object -->
   <bean id="participantDao" class="X.X.X.dao.participant.ParticipantDaoImpl" >
        <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>    

   <!-- Participant Business Object -->
   <bean id="participantBo" class="X.X.X.bo.participant.ParticipantBoImpl" >
        <property name="participantDao" ref="participantDao" />
   </bean> 

我的配置做得好吗?我可以以不同的方式配置应用程序吗? ,也许没有xml声明?使用@Inject 或@AutoWired 可能吗?但是它们的用例是什么?

【问题讨论】:

    标签: spring rest jsf-2 annotations managed-bean


    【解决方案1】:

    我更喜欢使用 Java EE 提供的标准。而且我更喜欢直接注释设置器而不是属性。使用这种方式更容易开始进行单元测试(和模拟这些对象)。还要检查我的答案here

    例如,您的类 GraphicService 将是这样的:

    @Component
    @Path("/Graphic")
    public class GraphicService {
    
       ParticipantBo participantBo;
    
       @Resource
       public void setParticipantBo(ParticipantBo participantBo){
            this.participantBo = participantBo;
       }
    

    更多关于@Resource的信息

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2019-10-14
      • 2011-12-29
      • 2011-11-26
      • 2018-01-10
      相关资源
      最近更新 更多