我們可以通過Spring進行非常方便的管理bean,只需要在類上面加一個注解就可以進行bean的注入,也就是所謂的DI。今天碰到了個小問題,來總結一下。
問題如下:
public abstract class TestBean { public String str; public TestBean(){ this.str = initStr(); } protected abstract String initStr(); } public class TestSon extends TestBean { @Resource public String str; @Override protected String initStr() { return this.str; } }
但是發現這個str始終是null。
原因:在實例化TestBean的時候不能確認str已經實例化,所以是先建立對象,再進行注入str的值。那么創建對象的時候,根據構造方法創建的對象中,還沒有注入str的值,所以只能為null。
解決:我們需要確認在str已經注入進來的情況下再對父類中的str賦值,那么這個時候需要子類實現 InitializingBean 這個接口,實現其中的afterPropertiesSet()
public class TestSon extends TestBean implements InitializingBean { @Resource public String str; @Override protected String initStr() { return this.str; } @Override public void afterPropertiesSet() throws Exception { super.str = this.str; } }
問題成功解決。注入成功