转自:
Spring中如何在一个Bean中注入一个内部Bean呢?
在日常开发中,有些实体类的定义,一个类中包含了另一个类,那么在Spring Bean中,同样也有此种操作,下文将讲述使用xml配置文件的方式注入内部bean的方法
实现思路:
使用bean中的bean标签即可注入一个内部bean
例:
<!--?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-3.0.xsd">
<bean class="..." id="outerBean">
<property name="target">
<!-- 定义内部Bean -->
<bean class="...">
</bean></property>
</bean>
</beans>
例: 下文将基于Eclispe建立一个Spring项目
- 创建 SpringDemo 项目
- 在 src 目录下创建 com.java265 包
- 添加相应的 jar 包,可参阅我的第一个Spring程序
- 在 com.java265 包下创建 Person、Man 和 MainApp 类
- 在 src 目录下创建 Spring 配置文件 Beans.xml
- 运行 SpringDemo 项目
Person 类
package com.java265;
public class Person {
private Man man;
public Man getMan() {
return man;
}
public void setMan(Man man) {
System.out.println("在setMan方法内");
this.man = man;
}
public void man() {
man.show();
}
}
Man 类
package com.java265;
public class Man {
private String name;
private int age;
public Man() {
System.out.println("在man的构造函数内");
}
public Man(String name, int age) {
System.out.println("在man的有参构造函数内");
this.name = name;
this.age = age;
}
public void show() {
System.out.println("名称:" + name + "\n年龄:" + 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;
}
}
Beans.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-3.0.xsd">
<bean id="person" class="com.java265.Person">
<property name="man">
<bean class="com.java265.Man">
<property name="name" value="java265.com" />
<property name="age" value="888" />
</bean>
</property>
</bean>
</beans>
MainApp 类
package com.java265;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
Person person = (Person) context.getBean("person");
person.man();
}
}
运行结果----
在man的有参构造函数内
在Person的构造函数内
名称:java265.com
年龄:888