2014-09-10 62 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

希望它能幫助。