Spring的依赖注入(DI)

依赖的意思:就是bean的创建依赖于Spring容器。

注入的意思:bean的属性由容器注入。


实例

步骤

  • 创建一个maven项目
  • 配置xml文件
  • 创建pojo(Student)类
  • 进行依赖注入
  • 进行测试

依赖注入的方式

  • 构造器注入
  • Set注入
  • 扩展方式注入

这里主要讲 S e t Set Set注入。

需要给对应的属性定义 S e t Set Set方法,然后通过 x m l xml xml b e a n bean bean p r o p e r t y property property实现属性的注入。

学生类

public class Student {
    //属性
    private Address address;
    private String  name;
    private String[] books;
    private List<String> hobbys;
    private Map<String,String> card;
    private Set<String> game;
    private String pointer;
    private Properties info;
    /*
    这一部分是Set 方法的定义
    ....
    ....
    */
}

引用对象作为属性(Address)类

package com.harris.pojo;

public class Address {
    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

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

重点来了,xml中的Set注入。

<?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="address" class="com.harris.pojo.Address"/>
    <bean id="student" class="com.harris.pojo.Student">
         <!-- bean 的 value 注入-->
        <property name="name" value="小明"/> 
    	<!-- bean 的 ref 注入-->
        <property name="address" ref="address"/>
        
        <!-- 数组的注入-->
        <property name="books">
            <array>	<!--使用array标签注入 -->
                <value>编程之美</value>
                <value>数据结构</value>
                <value>红与黑</value>
                <value>边城</value>
            </array>
        </property>
        <property name="card">
            <map> <!--使用map标签注入 entry(实例) -->
                <entry key="身份证" value="21321452412"/>
                <entry key="银行卡" value="112313123"/>
            </map>
        </property>
        <property name="game">
            <set> <!--使用set标签注入 -->
                <value>WOW</value>
                <value>LOL</value>
                <value>CF</value>
            </set>
        </property>
        <property name="hobbys">
            <list>	<!--使用list标签注入 -->
                <value>唱歌</value>
                <value>睡觉</value>
                <value>打游戏</value>
            </list>
        </property>
        <property name="info">
            <props>
                	<!--使用props标签注入 配置文件 -->
                <prop key="姓名">小明</prop>
                <prop key="性别"></prop>
                <prop key="年龄">18</prop>
            </props>
        </property>
        <property name="pointer">
           <!-- 附上空的注入 -->
            <null></null>
        </property>
    </bean>
</beans>

测试类(MyTest类)

import com.harris.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student = (Student) context.getBean("student");
        //使用toString() 方法打印
        System.out.println(student.toString());
    }
}

结果

Spring的依赖注入(DI)_xml