zoukankan      html  css  js  c++  java
  • Spring Inner Bean

    以下 Demo 演示了一个 Bean 中嵌套了另一个 Bean,即所谓的内部嵌套 Bean 的配置方法,内部嵌套的 Bean 支持属性(property)注入和构造函数(constructor - arg)注入。

    由于只是简单地知识点讲解,所以我们继续使用上面的项目。

    编写 Person.java
    在 Src/main/java 路径下创建包 com.shiyanlou.spring.innerbean,并在包内创建类 Person.java。

    内容如下:

    package com.shiyanlou.spring.innerbean;
    
    public class Person {
        private String name;
        private String address;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person [address=" + address + ", age=" + age + ", name=" + name + "]";
        }
    }
    

    编写 Customer.java
    在包 com.shiyanlou.spring.innerbean 下新建类 Customer.java 内容如下:

    package com.shiyanlou.spring.innerbean;
    
    public class Customer {
             private Person person;
            // 带参构造方法
            public Customer(Person person) {
                this.person = person;
            }
            // 有带参构造方法一定要有默认构造方法
            public Customer(){}
    
            public void setPerson(Person person) {
                this.person = person;
            }
    
            @Override
            public String toString() {
                return "Customer [person=" + person + "]";
            }
    }
    

    编写 SpringBeans.xml
    接下来配置 Bean,配置 Bean 时,要在 Customer 的 Bean 中注入内部 Bean,即 Person。三种方法:

    1、在 Customer 中,可以用 ref 属性引用 Person 的 Bean,如下:

        <bean id = "CustomerBean" class = "com.shiyanlou.spring.innerbean.Customer">
            <property name = "person" ref = "PersonBean" />
        </bean>
    
        <bean id = "PersonBean" class = "com.shiyanlou.spring.innerbean.Person">
            <property name = "name" value = "shiyanlou" />
            <property name = "address" value = "chengdu" />
            <property name = "age" value = "25" />
        </bean>
    

    以上方法利用 ref 很好的引用了 Person,但是,一旦 Person 被用在 Customer 下,也就不会被别的 Bean 引用。

    2、最好的方法就是在 Customer 的 Bean 中声明一个内部 Bean,如下:

     <bean id = "CustomerBean" class = "com.shiyanlou.spring.innerbean.Customer">
            <property name = "person">
                <bean class = "com.shiyanlou.spring.innerbean.Person">
                    <property name = "name" value = "shiyanlou" />
                    <property name = "address" value = "chengdu" />
                    <property name = "age" value = "25" />
                </bean>
            </property>
      </bean>
    

    3、内部 Bean 也可以通过构造函数注入:

     <bean id = "CustomerBean" class = "com.shiyanlou.spring.innerbean.Customer">
         <constructor-arg>
             <bean class = "com.shiyanlou.spring.innerbean.Person">
                 <property name = "name" value = "shiyanlou" />
                 <property name = "address" value = "chengdu" />
                 <property name = "age" value = "25" />
             </bean>
         </constructor-arg>
     </bean>
    

    编写 App.java
    接下来,我们在 com.shiyanlou.spring.innerbean 包下面创建 App.java 进行测试。内容如下:

    package com.shiyanlou.spring.innerbean;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.shiyanlou.spring.innerbean.Customer;
    
    public class App
    {
        private static ApplicationContext context;
    
            public static void main( String[] args )
            {
                context = new ClassPathXmlApplicationContext("SpringBeans.xml");
    
                Customer obj = (Customer) context.getBean("CustomerBean");
    
                System.out.println(obj.toString());
            }
    }
    

    运行

    mvn compile
    mvn exec:java -Dexec.mainClass="com.shiyanlou.spring.innerbean.App"
    

  • 相关阅读:
    数学基础之梯度
    背包九问心得
    如何判断机器是大端机还是小端机
    Matlab学习 2021年2月10日
    数字信号处理(超浓缩版)第一天
    matlab里的数据类型
    如何学习Matlab的帮助文档?& 如何去编写帮助文档
    fprintf 和 dlmwrite 在写数据时的区别
    lateinit 延迟初始化
    data class 在 Kotlin中的定义
  • 原文地址:https://www.cnblogs.com/sakura579/p/13920411.html
Copyright © 2011-2022 走看看