2014-09-10 75 views
-1

我正在使用休眠,弹簧& JSF的应用程序。 我实际上是在用Jersey(JAX-RS)开发一个带Restfull WebService的应用程序。为了这个需要,我用@Component注释了我的类。在这个类中,我需要调用一个服务来从数据库中抓取一些东西。@Inject,@AutoWired,@Resource&@ManagedProperty:我应该使用哪一个,何时何地?

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

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

    or  

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

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

大多数情况下,我正在使用@ManagedProperty注解在@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也许?但是他们的用例是什么?

回答

0

我乐意使用Java EE提供的标准。而且我也赞同直接为设置者注解而不是属性。用这种方法更容易开始进行单元测试(并嘲笑这些对象)。还检查我的答案here

例如你的类GraphicService会是这样:

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

    ParticipantBo participantBo; 

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

更多信息有关@Resource

希望它能帮助。