在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. 私有构造函数和继承(Java)
- 2. JsonSerializationException类型与私有构造函数
- 3. 春天(错误创建bean,没有可见的构造函数)与私有构造函数的单身类
- 4. 与私有构造
- 5. 在java中,如何使用其父类也有私有构造函数的私有构造函数创建类?
- 6. 具有动态构造函数值的spring bean
- 7. Java:访问带有类型参数的私有构造函数
- 8. 错误:构造函数是私有
- 9. 定义私有类的构造函数
- 10. CallInst构造函数是私有的?
- 11. KScenemer在Lucene有私人构造函数
- 12. 使类构造函数私有
- 13. 构造函数是私有的?
- 14. 参数与构造函数中的私有参数不匹配
- 15. 如何从静态内部类构造函数创建Spring bean?
- 16. 私有构造
- 17. 私有构造
- 18. unique_ptr成员,私人拷贝构造函数与移动构造函数
- 19. Java中的构造函数内部的私有变量
- 20. 从私有构造函数创建对象 - eclipse/java bug?
- 21. Kotlin - 具有私有构造函数的工厂函数
- 22. 如何测试与私有的构造函数C++
- 23. Javascript中的私有构造函数与静态成员
- 24. Java构造函数
- 25. 构造函数(java)
- 26. Java - 构造函数
- 27. Java构造函数参数Selenium与WebDriverBackedSelenium
- 28. Spring是否要求所有的bean都有默认的构造函数?
- 29. 私人类的构造函数是否必须是私有的?
- 30. C++私有构造
给它一个尝试然后发布结果如何? – dm3
这很难 - 我没有全部来源。 – user710818