Java如何在Spring中定义内部bean?
内部bean是另一个bean内部的一个bean定义,可以看作一个内部类。换句话说,内部bean是在另一个bean范围内定义的bean。在这种情况下,内部bean只能由外部bean使用。Spring上下文中没有其他bean可以引用该bean。
因此,如果您确定仅在单个Bean中使用Bean,则最好改用内部Bean。可以通过setter注入或构造函数注入来注入内部bean。
这是内部bean注入的Spring配置示例:
<?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="racer"> <property name="car"> <bean> <property name="maker" value="Ferrari"/> <property name="year" value="2019"/> </bean> </property> </bean> </beans>
在此配置中,我们使用二传手注射。因此,我们使用property元素。我们没有使用ref属性来引用另一个bean,而是使用bean元素内部的property元素定义了bean。然后,我们创建Carbean并设置其属性。
如果要构造函数注入,可以通过在bean元素内定义bean来将Carbean注入bean。Racerconstructor-argRacer
下面是我们的Racer和Car类。
package org.nhooo.example.spring.innerbean; public class Racer { private Car car; public Racer() { } public Racer(Car car) { this.car = car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Racer{" + "car=" + car + '}'; } }
package org.nhooo.example.spring.innerbean; public class Car { private String maker; private int year; public void setMaker(String maker) { this.maker = maker; } public void setYear(int year) { this.year = year; } @Override public String toString() { return "Car{" + "maker='" + maker + "'" + ", year=" + year + '}'; } }
让我们创建我们的Demo类来运行程序:
package org.nhooo.example.spring.innerbean; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Demo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"inner-bean.xml"}); Racer racer = (Racer) context.getBean("racer"); System.out.println("Racer = " + racer); } }
这是我们程序的输出:
Racer = Racer{car=Car{maker='Ferrari', year=2019}}