@ Inject,@ AutoWired,@ Resource& @ManagedProperty:我应该使用哪一个,何时何地?

时间:2014-09-10 15:11:49

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

我正在使用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 Annotation在我的类中使用@ManagedBean注释一个依赖项(一个调用然后调用Dao的ServiceBO)。

@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声明?使用@ 注入或@ AutoWired 可能吗?但他们的用例是什么?

1 个答案:

答案 0 :(得分:0)

我更喜欢使用Java EE提供的标准。而且我也更喜欢直接注释setter而不是属性。使用这种方式更容易开始进行单元测试(并模拟这些对象)。另请查看我的回答here

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

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

   ParticipantBo participantBo;

   @Resource
   public void setParticipantBo(ParticipantBo participantBo){
        this.participantBo = participantBo;
   }

有关@Resource

的更多信息

希望它有所帮助。