ちなみに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 件のコメント:
コメントを投稿