Spring 基于XML的构造函数和setter方法的依赖注入

Spring 依赖注入

Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系。

Spring 基于构造函数的依赖注入

  • 配置
<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">


    <!-- 构造方法注入
		* <constructor-arg> 用于配置构造方法一个参数argument
			name :参数的名称
			value:设置普通数据
			ref:引用数据,一般是另一个bean id值

			index :参数的索引号,从0开始 。如果只有索引,匹配到了多个构造方法时,默认使用第一个。
			type :确定参数类型
		例如:使用名称name
			<constructor-arg name="username" value="jack"></constructor-arg>
			<constructor-arg name="age" value="18"></constructor-arg>
		例如2:【类型type 和  索引 index】
			<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
			<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
	-->
    <bean id="userId1" class="com.cc.study.di.User" lazy-init="true">
        <constructor-arg  type="java.lang.Integer" value="1"></constructor-arg>
        <constructor-arg type="java.lang.String" value="bbb"></constructor-arg>
    </bean>
    <bean id="userId2" class="com.cc.study.di.User" lazy-init="true">
        <constructor-arg  name="uid" value="1"></constructor-arg>
        <constructor-arg name="username" value="bbb"></constructor-arg>
    </bean>

    <bean id="userId3" class="com.cc.study.di.User" lazy-init="true">
        <constructor-arg index="0"  value="1"></constructor-arg>
        <constructor-arg index="1"  value="2"></constructor-arg>
    </bean>

</beans>
  • User
package com.cc.study.di;

public class User {

	private Integer uid;
	private String username;
	private Integer age;

	public User(Integer uid, String username) {
		super();
		this.uid = uid;
		this.username = username;
		System.out.println("uid:" + uid + ", username:" + username);
	}

	public User(String username, Integer age) {
		super();
		this.username = username;
		this.age = age;
		System.out.println("username:" + username + ", age:" + age);
	}
}

  • 测试
 @Test
    public void demo07(){
        String xmlPath = "di4.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        User user = applicationContext.getBean("userId1",User.class);
    }

在这里插入图片描述

@Test
    public void demo08(){
        String xmlPath = "di4.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        User user = applicationContext.getBean("userId2",User.class);
    }

在这里插入图片描述

 @Test
    public void demo09(){
        String xmlPath = "di4.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        User user = applicationContext.getBean("userId3",User.class);
    }

在这里插入图片描述

Spring 基于setter方法的依赖注入

  • 配置
<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">


    <!-- setter方法注入
		* 普通数据
			<property name="" value="值">
			等效
			<property name="">
				<value>值
		* 引用数据
			<property name="" ref="另一个bean">
			等效
			<property name="">
				<ref bean="另一个bean"/>

	-->
    <bean id="personId" class="com.cc.study.di.Person">
        <property name="pname" value="kevin"></property>
        <property name="age">
            <value>1234</value>
        </property>

        <property name="homeAddr" ref="homeAddrId"></property>
        <property name="companyAddr">
            <ref bean="companyAddrId"/>
        </property>
    </bean>

    <bean id="homeAddrId" class="com.cc.study.di.Address">
        <property name="addr" value="广东"></property>
        <property name="tel" value="911"></property>
    </bean>
    <bean id="companyAddrId" class="com.cc.study.di.Address">
        <property name="addr" value="北京"></property>
        <property name="tel" value="120"></property>
    </bean>


</beans>

  • Person
public class Person {
    private String pname;
    private Integer age;
    private Address homeAddr;
    private Address companyAddr;

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Address getHomeAddr() {
        return homeAddr;
    }

    public void setHomeAddr(Address homeAddr) {
        this.homeAddr = homeAddr;
    }

    public Address getCompanyAddr() {
        return companyAddr;
    }

    public void setCompanyAddr(Address companyAddr) {
        this.companyAddr = companyAddr;
    }
}

  • Address
public class Address {

    private String addr;
    private String tel;

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    @Override
    public String toString() {
        return "Address{" +
                "addr='" + addr + '\'' +
                ", tel='" + tel + '\'' +
                '}';
    }
}

  • 测试
@Test
    public void demo10(){
        String xmlPath = "di5.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        Person p = applicationContext.getBean("personId",Person.class);
        System.out.println(p.getPname());
        System.out.println(p.getAge());
        System.out.println(p.getCompanyAddr());
        System.out.println(p.getHomeAddr());
    }

在这里插入图片描述

Spring 注入内部 Beans

  • 配置格式
 <bean id="outerBean" class="...">
      <property name="target">
         <bean id="innerBean" class="..."/>
      </property>
   </bean>
  • 配置
<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="personId" class="com.cc.study.di.Person">
        <property name="pname" value="kevin"></property>
        <property name="age">
            <value>1234</value>
        </property>
        <property name="homeAddr">
            <bean id="homeAddrId" class="com.cc.study.di.Address">
                <property name="addr" value="广东"></property>
                <property name="tel" value="911"></property>
            </bean>
        </property>
        <property name="companyAddr">
            <bean id="companyAddrId" class="com.cc.study.di.Address">
                <property name="addr" value="北京"></property>
                <property name="tel" value="120"></property>
            </bean>
        </property>
    </bean>
</beans>
  • 测试
@Test
    public void demo11(){
        String xmlPath = "di6.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        Person p = applicationContext.getBean("personId",Person.class);
        System.out.println(p.getPname());
        System.out.println(p.getAge());
        System.out.println(p.getCompanyAddr());
        System.out.println(p.getHomeAddr());
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值