Java 带注释的Spring3依赖注入(IoC)
spring上下文文件:Java 带注释的Spring3依赖注入(IoC),java,spring,Java,Spring,spring上下文文件: @Named("loginDetailsService") public class LoginDetailsServiceImpl implements LoginDetailsService { @Inject @Named("loginDetailsDAO") private LoginDetailsDAO loginDetailsDAO; public List<UserLogin> loginDetails(Us
@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;
}
在一些示例中,我发现将loginDetailsDAO的setter方法用作setLoginDetailsDAO…{..}
是否需要使用setter方法?何时需要使用getter/setter?如果我不知道会发生什么?根据spring3.x格式,上述代码是否需要修改
如果没有setter方法,我就能够连接DAO实现。使用setter方法的好处是,您可以通过编程在单元测试中注入模拟依赖项。至少对我来说,这就足够了。如果您使用注释,我强烈建议您使用注释,那么您可以对字段、setter或构造函数进行注释。只需要在其上放置注释。如果是字段,将使用反射直接在字段中设置。如果是setter,则将使用依赖项调用该方法。如果是构造函数,并且这是我极力推荐的选项,那么将使用所有适当的依赖项调用构造函数
我强烈推荐构造函数注入,因为它让我们回到了Java中真正的面向对象编程,在Java中,构造函数的任务是创建一个处于有效状态的对象。如果不提供所需的所有依赖项,该类就不可能在Spring内部或外部使用,尤其是在单元测试中使用。@Java:这不准确。请参阅。您也可以对构造函数注入执行相同的操作。它甚至更能防止错误,因为您不能忘记依赖项。
<context:component-scan base-package="com.home.app" />