Spring系列——依賴注入的幾種方式,你都瞭解嗎?

寫在前面:
java

小夥伴兒們,你們好!上一篇咱們講了Spring中的核心思想IOC控制反轉——Spring系列——帶你瞭解什麼是IOC(控制反轉)?程序員

這期讓咱們繼續學習Spring中依賴注入的幾種方式!web

思惟導圖:spring

1、屬性注入;

比方說我剛開始輸出一個對象的話,看代碼:微信

  • 先創建一個實體類People:
package com.java.entity;

public class People {
    private int id;
    private String name;
    private int age;

    public People() {
        //調用默認的構造方法
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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.xsd"
>


    <bean id="people" class="com.java.entity.People"></bean>

</beans>
  • 再來個測試類:
package com.java.test;

import com.java.entity.People;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
    public static void main(String[] args) {
        //加載beans.xml文件,調用Spring接口
        ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
        //經過id獲取bean,返回一個對象
        People people=(People)ac.getBean("people");
        //調用方法
        System.out.println(people);

    }
}

咱們看運行結果:編輯器

那麼,屬性注入又是怎麼回事呢?ide

屬性注入就是能夠在beans配置文件中主動加入屬性,以此來改變輸出對象的特色;函數

  • 咱們在People類裏面添加一下構造函數,並重寫一下toString方法:
public People() {
        //調用默認的構造方法
    }

    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
  • 在配置文件中加入屬性:
//屬性注入
<bean id="people2" class="com.java.entity.People">
        <property name="id" value="1"></property>
        <property name="age" value="18"></property>
        <property name="name" value="張三"></property>
    </bean>
  • 測試函數:
//屬性注入
People people2=(People)ac.getBean("people2");
        System.out.println(people2);

咱們看運行效果:學習

2、構造函數注入;(經過類型;經過索引;聯合使用)

這裏有三種注入方式;測試

  • 先要把實體類的屬性構造方法加上:
public People(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
  • 而後是配置文件:
 <!--類型注入-->
    <bean id="people3" class="com.java.entity.People">
        <constructor-arg type="int" value="2"></constructor-arg>
        <constructor-arg type="String" value="李四"></constructor-arg>
        <constructor-arg type="int" value="19"></constructor-arg>
    </bean>

    <!--索引注入-->
    <bean id="people4" class="com.java.entity.People">
        <constructor-arg index="0" value="3"></constructor-arg>
        <constructor-arg index="1" value="王五"></constructor-arg>
        <constructor-arg index="2" value="20"></constructor-arg>
    </bean>

    <!--聯合使用-->
    <bean id="people5" class="com.java.entity.People">
        <constructor-arg type="int" index="0" value="4"></constructor-arg>
        <constructor-arg type="String" index="1" value="趙六"></constructor-arg>
        <constructor-arg type="int" index="2" value="21"></constructor-arg>
    </bean>
  • 測試函數:
     //類型注入
        People people3=(People)ac.getBean("people3");
        System.out.println(people3);

        //類型注入
        People people4=(People)ac.getBean("people4");
        System.out.println(people4);

        //聯合使用
        People people5=(People)ac.getBean("people5");
        System.out.println(people5);

運行結果:

3、工廠方法注入;(非靜態工廠,靜態工廠);

這裏分爲靜態工廠和非靜態工廠; 通常用得多的都是靜態工廠;

  • 咱們先創建一個工廠實體類:
package com.java.factory;

import com.java.entity.People;

public class PeopleFactory {
    //非靜態工廠
    public People createPeople(){
        People p=new People();
        p.setId(5);
        p.setName("阿七");
        p.setAge(22);
        return p;
    }

    //靜態工廠
    public static People createPeople1(){
        People p=new People();
        p.setId(6);
        p.setName("阿八");
        p.setAge(23);
        return p;
    }
}

  • 配置文件:
    <!--工廠模式的非靜態方法-->
    <bean id="peopleFactory" class="com.java.factory.PeopleFactory"></bean>

    <bean id="people6" factory-bean="peopleFactory" factory-method="createPeople"></bean>

    <!--工廠模式的靜態方法-->
    <bean id="people7" class="com.java.factory.PeopleFactory" factory-method="createPeople1"></bean>
  • 測試類:
  //工廠方式注入,非靜態
        People people6=(People)ac.getBean("people6");
        System.out.println(people6);

        //工廠方式注入,靜態
        People people7=(People)ac.getBean("people7");
        System.out.println(people7);

運行結果:



好了,今天就先分享到這裏了,下期繼續給你們帶來Spring系列後續講解!歡迎關注個人原創技術公衆號~

原創實屬不易,求個關注吧~



本文分享自微信公衆號 - 程序員的時光(gh_9211ec727426)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索