Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带注释的Spring3依赖注入(IoC)_Java_Spring - Fatal编程技术网

Java 带注释的Spring3依赖注入(IoC)

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

spring上下文文件:

@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" />