Java 如何在调用工厂方法之前自动关联类字段?
由于项目的结构,我在使用@autowired注释时遇到了问题。。。我有一个类,它应该是一个具有单例作用域的beanJava 如何在调用工厂方法之前自动关联类字段?,java,spring,Java,Spring,由于项目的结构,我在使用@autowired注释时遇到了问题。。。我有一个类,它应该是一个具有单例作用域的bean public class Dumper { public void dumpData() { //stuff } } 它应该用在其他类中 public class DataStore { @Autowired Dumper dumper; } 但DataDource类已经在使用factory method=getInst的其他
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,并在其中使用autowireds
。如果您确实有充分的理由不这样做,那么您必须找到对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);
}
}