在Spring中可能的類bean沒有公共構造函數,但只有私有? 當創建bean時,這個私有構造函數會調用嗎? 謝謝。Java Spring bean與私有構造函數
回答
是的,Spring可以調用私有構造函數。如果它找到一個具有正確參數的構造函數,而不管其可見性如何,它將使用反射來將其構造函數設置爲可訪問。
您能否給我參考文檔?構造函數有參數,並在xml文件中爲這個參數賦值。 – user710818
你的意思是說,如果一個bean有特定的東西像private bean(){...} spring可以調用它嗎?這是怎麼可能的,這違背了「私人」的全部目的。 –
對不起,我可能錯了,它只是沒有參數的構造函數。我只是通過我在自己的項目中注意到的事情。我不能說我在任何地方的Spring文檔都見過它。但是這是負責實例化的類的javadoc。http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/BeanUtils.html#instantiateClass(java.lang.reflect.Constructor,%20java.lang.Object .. ) –
您通常會在這些bean中使用靜態工廠方法,您可以指定spring的方法來獲取該bean的實例。見3.3.1.3 here.這是Spring推薦的方式,而不是違反可見性限制。
奇怪,沒有靜態方法,沒有公共構造函數,但是當我調試 - 調用私有構造函數!通過sun.reflect.NativeConstructorAccessorImpl – user710818
沒有具體細節/代碼將不可能進一步評論! –
我想你錯了。沒有特定的代碼 - 我在調試器中只看到標準的sun/spring方法。 – user710818
您可以隨時使用一個工廠方法來創建豆,而不是依靠一個默認的構造,從The IoC container: Instantiation using an instance factory method:
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="serviceLocator"
factory-method="createInstance"/>
這樣做,你可以使用非默認的構造函數爲你的bean的優勢,而且也可以注入工廠方法bean的依賴關係。
有趣,但我找不到工廠。可能存在另一種方式? – user710818
@Matthew:他似乎在圍繞一些富有感染力的第三方代碼加裝Spring。這太麻煩了。 –
@Donal,不,我不明白他在評論中說了些什麼。 –
是的,私人構造函數在春季被調用。 考慮我的代碼:
bean定義文件:
<bean id="message" class="com.aa.testp.Message">
<constructor-arg index="0" value="Hi Nice"/>
</bean>
Bean類:
package com.aa.testp;
public class Message {
private String message;
private Message(String msg) {
// You may add your log or print statements to check execution or invocation
message = msg;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void display() {
System.out.println(" Hi " + message);
}
}
上面的代碼工作正常。因此,Spring調用了私有構造函數。
- 1. Spring @Configurable Spring Singleton bean構造函數
- 2. 私有構造函數和繼承(Java)
- 3. JsonSerializationException類型與私有構造函數
- 4. 春天(錯誤創建bean,沒有可見的構造函數)與私有構造函數的單身類
- 5. 實例化的Spring bean與InputStream的構造函數的參數
- 6. 與私有構造
- 7. 與私有構造
- 8. 在java中,如何使用其父類也有私有構造函數的私有構造函數創建類?
- 9. 具有動態構造函數值的spring bean
- 10. Java:訪問帶有類型參數的私有構造函數
- 11. Bean中的構造函數
- 12. 具有基於Java的Spring配置中的多個構造函數的Bean
- 13. 私人構造函數或私有函數?
- 14. 構造函數是私有的?
- 15. 正確使用私有構造函數
- 16. KScenemer在Lucene有私人構造函數
- 17. CgLib增強私有構造函數
- 18. CallInst構造函數是私有的?
- 19. 錯誤:構造函數是私有
- 20. 使類構造函數私有
- 21. libstdC++私有basic_streambuf構造函數
- 22. 定義私有類的構造函數
- 23. 使實體的構造函數私有
- 24. 帶有一個參數的私有拷貝構造函數和構造函數
- 25. 參數與構造函數中的私有參數不匹配
- 26. 如何從靜態內部類構造函數創建Spring bean?
- 27. 私有拷貝構造函數與unamed參數?
- 28. 用Map-typed構造函數參數定義Spring bean
- 29. 私有構造
- 30. 私有構造
給它一個嘗試然後發佈結果如何? – dm3
這很難 - 我沒有全部來源。 – user710818