Java 如何在调用工厂方法之前自动关联类字段?

Java 如何在调用工厂方法之前自动关联类字段?,java,spring,Java,Spring,由于项目的结构,我在使用@autowired注释时遇到了问题。。。我有一个类,它应该是一个具有单例作用域的bean public class Dumper { public void dumpData() { //stuff } } 它应该用在其他类中 public class DataStore { @Autowired Dumper dumper; } 但DataDource类已经在使用factory method=getInst的其他

由于项目的结构,我在使用@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的实例。。。创建类似dao的bean-调用很多类似这样的情况。。。有人知道spring中是否有工具在调用工厂方法之前自动连接类的字段吗?

只要编写
DataStore ds=newdatastore()
ds
上不会发生任何spring初始化。您必须在Singleton类中自动连接它,并使Singleton成为Springbean。出于同样的原因,您应该使
dao
成为bean,并在其中使用autowire
ds
。如果您确实有充分的理由不这样做,那么您必须找到对
ApplicationContext
的访问权限,并获取bean,但决不能通过
new
创建它们(或者根本不使用spring…)

现在您应该创建DAOBean,自动连接其中的数据存储

public class Singleton {

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

现在确保您已经在配置文件中正确地定义了bean和引用,为了避免初始化问题。这意味着数据存储bean是用dumper作为其引用定义的,同时也为dumper定义了单独的bean。

您没有连接任何东西,而是自己构建一个新的
数据存储。
在连接之前,我在这里编写代码,显然,在Singleton中使用@Autowired for DataStore后,我遇到了一系列问题。。。如果我将dao=new dao(ds)提取到PostConstruct,在这种情况下它能帮助我吗?不,它永远不会工作,因为您没有对数据存储使用自动连接。您自己正在创建一个实例,它不是由spring管理的,这基本上使
@Autowired
无用。哦,上帝!我告诉过你-我使用autowire,但在这里我编写了旧代码
公共类单例{DataStore ds=new DataStore();Dao-Dao;getInst(){Dao=Dao(ds);}
现在使用
公共类单例{@Autowired DataStore ds;Dao-Dao;getInst(){Dao=Dao(ds);}}
并且在初始化方法之前初始化珠子转储程序会遇到问题。请使用当前代码和当前问题编辑您的问题。请参阅我在代码中使用的问题下的最后一条评论
@Autowired DataStore ds
public class Singleton {

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