Here指出,即使bean类没有任何getter / setter方法,也可以实例化,配置和注入Spring bean。
是真的吗?
您能举个例子(或此类例子的链接)吗?
之所以将Spring托管对象称为Bean是因为 在早期版本中,Spring仅用于 JavaBeans。当然不再是这种情况: Spring可以管理 几乎任何对象,即使它没有JavaBean类型 特性,例如默认构造函数或 mutator方法 (获取器和设置器)。尽管如此,“春豆”一词具有 卡住了。
我得到以下例外情况:
org.springframework.beans.factory.BeanCreationException
由org.springframework.beans.NotWritablePropertyException: Invalid property 'name' of bean class [com.my.pkg1.Student]: Bean property 'name' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
引起
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
String metadata = "mybean.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(metadata );
Student student = context.getBean("student", Student.class);
System.out.println(student.age);
System.out.println(student.name);
}
}
和
public class Student {
String name;
int age;
// public String getName() {
// return name;
// }
//
// public void setName(String name) {
// this.name = name;
// }
//
// public int getAge() {
// return age;
// }
//
// public void setAge(int age) {
// this.age = age;
// }
}
和mybean.xml bean定义学生类的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="com.my.pkg1.Student">
<property name="name" value="John"></property>
<property name="age" value="23"></property>
</bean>
</beans>
我觉得<property name="name" value="John">
如果没有getter和setter的话是无效的...
答案 0 :(得分:0)
由于您的bean定义设置了name
和age
属性,因此需要使用setter来分配这些值。
您还可以使用构造函数(<constructor-arg>
)或构建函数(factory-method
)自定义bean。
以下是这些不同构造方法的简介:https://www.baeldung.com/spring-xml-injection