SpringFramework|基於XML的依賴注入

SpringFramework|基於XML的依賴注入

環境交代

Java: 1.8java

Maven: 3spring

SpringFramework版本以及各組件成員: 5.1.1.RELEASEthis

  • spring-context
  • spring-core
  • spring-beans

依賴注入

分別有兩種注入形式:code

  • 構造注入
  • 設值注入

基於XML的構造注入

背景

例子中的BeanUser是個"啞吧", 不具有表達能力. 它但願能借用BeansayHelloWorld來講兩句話, 以表達本身第一次加入程序你們庭的喜悅之情.xml

代碼

具備sayHelloWorld的bean - Bean.java對象


這個"Bean"並不符合JavaBean規範, 只是根據Spring中的配置順口叫的...
具體的JavaBean能夠另行搜索.get

package noioo;

public class Bean {
    public void sayHelloWorld(){
        System.out.println("Hello World");
    }
}

這是想說話的 - BeanUser.javait

package noioo;

public class BeanUser {

    private Bean bean;

    // need to SayHelloWorld
    public BeanUser(Bean bean){
        this.bean = bean;
    }

    // user
    public void useBean(){
        bean.sayHelloWorld();
    }
}

srping容器, 配置依賴注入的元數據 - spring-beans.xmlio

<?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-->
    <bean id="bean" class="noioo.Bean"/>

    <!--bean的使用者-->
    <bean id="beanUser" class="noioo.BeanUser">
        <!--代表須要構造注入, 並指定ref=所依賴bean的名字-->
        <constructor-arg ref="bean"/>
    </bean>
</beans>

這是第三方調用方(執行者), BeanUser總得有我的來調用它的方法.class

package noioo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainRunner {

    public static void main(String[] args){

        // 加載容器
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-beans.xml");

        // 利用容器對象(上下文)來獲取beanUser對象, 此時會依據beanUser在容器中的配置元數據進行注入.
        BeanUser beanUser = (BeanUser)context.getBean("beanUser");

        // 調用方法: 代表了beanUser能夠使用bean中的方法, 是已經得到了bean對象的了.
        beanUser.useBean();
    }
}

運行結果

運行MainRunner, 會出現如下結果:

Hello World

Process finished with exit code 0

基於XML的設值注入

背景

還是上面的例子.

代碼

具備sayHelloWorld的bean - Bean.java

package noioo;

public class Bean {
    public void sayHelloWorld(){
        System.out.println("Hello World");
    }
}

這是想說話的 - BeanUser.java

package noioo;

public class BeanUser {
    
    private Bean bean;
    public Bean getBean() {
        return bean;
    }
    public void setBean(Bean bean) {
        this.bean = bean;
    }
    public void useBean(){
        bean.sayHelloWorld();
    }
}

配置文件 - spring-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-->
    <bean id="bean" class="noioo.Bean"/>

    <!--bean的使用者-->
    <bean id="beanUser" class="noioo.BeanUser">
        <!--代表須要構造注入, 並指定ref=所依賴bean的名字-->
        <property name="bean" ref="bean"/>
    </bean>
</beans>

執行者

package noioo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainRunner {

    public static void main(String[] args){

        // 加載容器
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-beans.xml");

        // 利用容器對象(上下文)來獲取beanUser對象, 此時會依據beanUser在容器中的配置元數據進行注入.
        BeanUser beanUser = (BeanUser)context.getBean("beanUser");

        // 調用方法: 代表了beanUser能夠使用bean中的方法, 是已經得到了bean對象的了.
        beanUser.useBean();
    }
}

運行結果

Hello World

Process finished with exit code 0
相關文章
相關標籤/搜索