簡體   English   中英

Spring 3帶有注釋的依賴注入(IoC)

[英]spring 3 Dependency injection( IoC) with annotation

@Named("loginDetailsService")
public class LoginDetailsServiceImpl implements LoginDetailsService {

    @Inject
    @Named("loginDetailsDAO")
    private LoginDetailsDAO loginDetailsDAO;

    public List<UserLogin> loginDetails(UserLogin login) {
        return loginDetailsDAO.loginDetails(login);
    }


public class LoginDetailsDAOImpl extends HomeSessionFactory implements LoginDetailsDAO {


    @SuppressWarnings("unchecked")
    @Transactional(readOnly = true)
    public List<UserLogin> loginDetails(UserLogin login) {
        session = sessionFactory.openSession();
        Query query = null;
        try {
                 // blah...
            } catch(Exception e){
         }
        return query.list();
}


public abstract class HomeSessionFactory {

    @Inject
    @Named("sessionFactory")
    protected SessionFactory sessionFactory;
    protected Session session;  
}

春天的上下文文件:

<context:component-scan base-package="com.home.app" />

在某些示例中,我發現使用setter方法將loginDetailsDAO用作setLoginDetailsDAO(...){..}

是否需要使用setter方法? 什么時候需要使用getter / setter? 如果我不怎么辦? 按照spring3.x格式,上述代碼是否需要任何修改?

沒有設置方法,我能夠連接DAO實現。

使用setter方法的好處是,您可以以編程方式在單元測試中注入模擬依賴項。 僅此而已(至少對我而言)。

如果您要使用批注-我強烈建議這樣做-那么您可以批注字段,設置器或構造函數。 只需要添加注釋的內容即可。 如果是字段,則將使用反射將其直接設置在字段中。 如果是setter,則將使用依賴項調用該方法。 如果構造函數(這是我強烈建議的選擇),則將以所有適當的依賴項調用構造函數。

我強烈建議使用構造函數注入,因為它使我們回到Java中真正的面向對象的編程中,在Java中,構造函數的工作是在有效狀態下創建對象。 如果沒有提供所有必需的依賴關系,則無法在Spring之中或之外(尤其是在單元測試中)使用該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM