ちなみにDIについてはマネージャに教えて頂いたこのページが分かり易かった。
>>要するに DI って何なのという話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
つまづいたのはstaticメソッドでDIしたフィールドを使おうとしたとき。
改修しなきゃいけないとこがstaticメソッド内だったんでどうしてもそん中でDIしたDaoを使いたかったんだけど、@Autowiredはstaticフィールドには使えない。。
てことで、staticフィールドに直接DIしないでsetterに@Autowiredをつける。
setter経由でDI。
なんとなくこんな感じ。
public class StaticTest {
static TestDao testDao;
@Autowired
public void setTestDao(TestDao testDao) {
StaticTest.testDao = testDao;
}
static String getTestData(int id) {
return testDao.selectDataById(id);
}
}
でもこれだと本番環境でのテストでうまくいかず…多分大丈夫な気がするんだが…
でやり方変えて直接xmlから定義情報とってくる感じでセット。
一応これでうまくはいった。。
public class StaticTest {
static ApplicationContext appCtx;
static TestDao testDao;
static {
initializeStaticDao();
}
private static void initializeStaticDao() {
appCtx = new ClassPathXmlApplicationContext(new String[] { "ApplicationContext.xml" });
testDao = (TestDao) appCtx.getBean("TestDao");
}
static String getTestData(int id) {
return testDao.selectDataById(id);
}
}
0 件のコメント:
コメントを投稿