如何在调用factory-method之前自动装配类字段?

时间:2014-07-18 08:17:38

标签: java spring

由于项目的结构,我使用@autowired注释时遇到了麻烦...我的类应该是一个具有单例范围的bean ...

public class Dumper {

    public void dumpData() {
        //stuff
    }
}

它应该用在其他一些类

public class DataStore {

    @Autowired
    Dumper dumper;
}

但DataDource类已经在其他使用factory-method = getInst的类中使用 所以它像之前一样初始化

public class Singleton {
    @Autowired
    DataStore ds;
    Dao dao;
    getInst () {
        dao = Dao(ds);
//other stuff
    }
}

所以当我使用@autowired来ds dao没有ds的实例...并且像bean一样创建dao - 调用这样的很多情况......有没有人知道春天有一些工具可以自动装载字段在调用工厂方法之前的类?

2 个答案:

答案 0 :(得分:0)

一旦你写DataStore ds = new DataStore();ds就不会发生任何弹簧初始化。您必须在类Singleton中自动装配它,并使Singleton成为一个spring bean。出于同样的原因,您应该将dao作为bean并在其中自动装配ds。如果你真的有充分的理由不这样做,你必须找到ApplicationContext的访问权限并获得bean的规范,但从不通过new创建它们(或者不是完全使用弹簧...)。

答案 1 :(得分:0)

public class Dumper {

    public void dumpData() {
        //stuff
    }
}


public class DataStore {

    @Autowired
    Dumper dumper;
}

现在你应该创建Dao Bean,在其中自动装配数据存储

public class Singleton {

    @Autowired
    DataStore ds;
    Dao dao;
    getInst () {
        dao = Dao(ds);
    }
}

现在确保你已经在配置文件中正确地引用了bean,以避免初始化问题。这意味着数据存储bean定义为dumper作为其ref以及单独的dump for dumper。 < / p>