[英]Spring IoC - Dependency Injection -> NullPointerException
[英]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.