Spring注入内部Bean

开课吧开课吧锤锤2021-08-09 11:52

Java中在类内部定义的类称为内部类,同理在Bean中定义的Bean称为内部Bean。注入内部Bean使用<property>和<constructor-arg>中的<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 id="outerBean" class="...">
        <property name="target">
            <!-- 定义内部Bean -->
            <bean class="..." />
        </property>
    </bean>
</beans>

内部Bean的定义不需要指定id和name。如果指定了,容器也不会将其作为区分Bean的标识符,反而会无视内部Bean的scope属性。所以内部Bean总是匿名的,而且总是随着外部Bean创建。  

在实际开发中很少注入内部Bean,因为开发者无法将内部的Bean注入外部Bean以外的其它Bean。  

示例  

下面使用EclipseIDE演示如何注入内部Bean,步骤如下:  

1、创建SpringDemo项目,并在src目录下创建net.kaikeba包。  

2、添加相应的jar包。  

3、在net.kaikeba包下创建Person、Man和MainApp类。  

4、在src目录下创建Spring配置文件Beans.xml。  

5、运行SpringDemo项目。  

Person类代码如下。  

package net.kaikeba;
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 net.kaikeba;
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="net.kaikeba.Person">
        <property name="man">
            <bean class="net.kaikeba.Man">
                <property name="name" value="kaikeba" />
                <property name="age" value="8" />
            </bean>
        </property>
    </bean>
</beans>

MainApp类代码如下。  

package net.kaikeba;
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的构造函数内
名称:kaikeba
年龄:8

以上就是开课吧广场小编为大家整理发布的“Spring注入内部Bean”一文,更多Java教程相关内容尽在开课吧广场Java教程频道!  

Spring注入内部Bean

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享