最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的IOC解決程序耦合的實現(xiàn)

 更新時間:2024年07月01日 09:18:52   作者:三月37  
本文主要介紹了Spring的IOC解決程序耦合的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.創(chuàng)建工程

1.1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.by</groupId>
    <artifactId>Spring_IOC_Xml</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <!-- 項目源碼及編譯輸出的編碼 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 項目編譯JDK版本 -->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
    <dependencies>
        <!-- Spring常用依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
    </dependencies>
</project>

注意:Jar包彼此存在依賴,只需引入最外層Jar即可由Maven自動將相關(guān)依賴Jar引入到項目中。

Spring常用功能的Jar包依賴關(guān)系:

核心容器由 beans、core、context 和 expression(Spring Expression Language,SpEL)4個模塊組成。

  • spring-beans和spring-core模塊是Spring框架的核心模塊,包含了控制反轉(zhuǎn)(Inversion of Control,IOC)和依賴注入(Dependency Injection,DI)。BeanFactory使用控制反轉(zhuǎn)對應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼進行了分離。BeanFactory屬于延時加載,也就是說在實例化容器對象后并不會自動實例化Bean,只有當Bean被使用時,BeanFactory才會對該 Bean 進行實例化與依賴關(guān)系的裝配。

  • spring-context模塊構(gòu)架于核心模塊之上,擴展了BeanFactory,為它添加了Bean生命周期控制、框架事件體系及資源加載透明化等功能。此外,該模塊還提供了許多企業(yè)級支持,如郵件訪問、遠程訪問、任務(wù)調(diào)度等,ApplicationContext 是該模塊的核心接口,它的超類是 BeanFactory。與BeanFactory不同,ApplicationContext實例化后會自動對所有的單實例Bean進行實例化與依賴關(guān)系的裝配,使之處于待用狀態(tài)。

  • spring-expression 模塊是統(tǒng)一表達式語言(EL)的擴展模塊,可以查詢、管理運行中的對象,同時也可以方便地調(diào)用對象方法,以及操作數(shù)組、集合等。它的語法類似于傳統(tǒng)EL,但提供了額外的功能,最出色的要數(shù)函數(shù)調(diào)用和簡單字符串的模板函數(shù)。EL的特性是基于Spring產(chǎn)品的需求而設(shè)計的,可以非常方便地同Spring IoC進行交互。

1.2.dao

/**
 * 持久層實現(xiàn)類
 */
public class UserDaoImpl implements UserDao {

    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}

1.3.service

/**
 * 業(yè)務(wù)層實現(xiàn)類
 */
public class UserServiceImpl implements UserService {
    //此處有依賴關(guān)系
    private UserDao userDao = new UserDaoImpl();

    public void addUser(){
        userDao.addUser();
    }
}

2.IOC

2.1.applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    
    <!--
		2、把對象交給spring來創(chuàng)建
       		id:給對象在容器中提供一個唯一標識。用于獲取對象	
		   	class:指定類的全限定類名。用于反射創(chuàng)建對象。默認情況下調(diào)用無參構(gòu)造函數(shù)
	-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
    <bean id="userService" class="com.by.service.UserServiceImpl"></bean>
</beans>

注意:命名無限制,約定俗成命名有:spring-context.xml、applicationContext.xml、beans.xml

2.2.測試

/**
 * 模擬表現(xiàn)層
 */
public class Client {
    public static void main(String[] args) {
        //1.使用ApplicationContext接口,就是在獲取spring容器
        ApplicationContext ac = new 
            ClassPathXmlApplicationContext("applicationContext.xml");
        //2.根據(jù)bean的id獲取對象
        UserDao userDao = (UserDao) ac.getBean("userDao");
        System.out.println(userDao);

        UserService userService = (UserService) ac.getBean("userService");
        System.out.println(userService);
        userService.addUser();
    }
}

3.DI

概述:DI(Dependency Injection)依賴注入,在Spring創(chuàng)建對象的同時,為其屬性賦值,稱之為依賴注入。

3.1.構(gòu)造函數(shù)注入

顧名思義,就是使用類中的構(gòu)造函數(shù),給成員變量賦值。注意,賦值的操作不是我們自己做的,而是通過配置的方式,讓spring框架來為我們注入。具體代碼如下:

/**
 * 業(yè)務(wù)層實現(xiàn)類
 */
public class UserServiceImpl implements UserService {

    private UserDao userDao;
    private String name;
    private Integer age;

    public UserServiceImpl(UserDao userDao, String name, Integer age) {
        this.userDao = userDao;
        this.name = name;
        this.age = age;
    }

    public void addUser(){
        System.out.println(name+","+age);
        userDao.addUser();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    <!--2、把對象交給spring來創(chuàng)建-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
    <bean id="userService" class="com.by.service.UserServiceImpl">
        <!--
               要求:類中需要提供一個對應(yīng)參數(shù)列表的構(gòu)造函數(shù)。
               標簽:constructor-arg
                       ==給誰賦值:==
				           index:指定參數(shù)在構(gòu)造函數(shù)參數(shù)列表的索引位置
				           name:指定參數(shù)在構(gòu)造函數(shù)中的名稱
				       ==賦什么值:==
				           value:它能賦的值是基本數(shù)據(jù)類型和String類型
				           ref:它能賦的值是其他bean類型,也就是說,必須得是在配置文件中配置過的bean
        -->
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
        <constructor-arg name="name" value="張三"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
    </bean>
</beans>

3.2.set方法注入

顧名思義,就是在類中提供需要注入成員的set方法。具體代碼如下:

/**
 * 業(yè)務(wù)層實現(xiàn)類
 */
public class UserServiceImpl implements UserService {

    private UserDao userDao;
    private String name;
    private Integer age;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public void addUser(){
        System.out.println(name+","+age);
        userDao.addUser();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    <!--2、把對象交給spring來創(chuàng)建-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
    <bean id="userService" class="com.by.service.UserServiceImpl">
        <!--
               要求:property
               標簽:constructor-arg
                       ==給誰賦值:==
				           name:找的是類中set方法后面的部分
				       ==賦什么值:==
				           value:它能賦的值是基本數(shù)據(jù)類型和String類型
				           ref:它能賦的值是其他bean類型,也就是說,必須得是在配置文件中配置過的bean
        -->
        <property name="userDao" ref="userDao"></property>
        <property name="name" value="張三"></property>
        <property name="age" value="18"></property>
    </bean>
</beans>

3.3.自動注入

不用在配置中 指定為哪個屬性賦值,由spring自動根據(jù)某個 "原則" ,在工廠中查找一個bean并為屬性注入值。具體代碼如下:

/**
 * 業(yè)務(wù)層實現(xiàn)類
 */
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(){
        userDao.addUser();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    <!--2、把對象交給spring來創(chuàng)建-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
        <!--autowire="byType":按照類型自動注入值-->
    <bean id="userService" class="com.by.service.UserServiceImpl" autowire="byType">
    </bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    <!--2、把對象交給spring來創(chuàng)建-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
    <!--autowire="byType":按照類型自動注入值-->
    <bean id="userService" class="com.by.service.UserServiceImpl" autowire="byName">
    </bean>
</beans>

3.4.注入集合類型的屬性

顧名思義,就是給類中的集合成員傳值,它用的也是set方法注入的方式,只不過變量的數(shù)據(jù)類型都是集合。我們這里介紹注入數(shù)組,List,Set,Map。具體代碼如下:

/**
 * 業(yè)務(wù)層實現(xiàn)類
 */
public class UserServiceImpl implements UserService {

    private UserDao userDao;
    private String[] myStrs;
    private List<String> myList;
    private Set<String> mySet;
    private Map<String,String> myMap;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void setMyStrs(String[] myStrs) {
        this.myStrs = myStrs;
    }

    public void setMyList(List<String> myList) {
        this.myList = myList;
    }

    public void setMySet(Set<String> mySet) {
        this.mySet = mySet;
    }

    public void setMyMap(Map<String, String> myMap) {
        this.myMap = myMap;
    }

    public void addUser(){
        System.out.println(Arrays.toString(myStrs));
        System.out.println(myList);
        System.out.println(mySet);
        System.out.println(myMap);
        userDao.addUser();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要導(dǎo)入schema約束-->
<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">
    <!--2、把對象交給spring來創(chuàng)建-->
    <bean id="userDao" class="com.by.dao.UserDaoImpl"></bean>
    <bean id="userService" class="com.by.service.UserServiceImpl">
        <!--
                要求:property
                標簽:constructor-arg
                        ==給誰賦值:==
				            name:找的是類中set方法后面的部分
				        ==賦什么值:==
				            value:它能賦的值是基本數(shù)據(jù)類型和String類型
				            ref:它能賦的值是其他bean類型,也就是說,必須得是在配置文件中配置過的bean
        -->
        <property name="userDao" ref="userDao"></property>
        <!-- 給mySet集合注入數(shù)據(jù) -->
        <property name="mySet">
            <set>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </set>
        </property>
        <!-- 注入array數(shù)組數(shù)據(jù) -->
        <property name="myArray">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>
        <!-- 注入list集合數(shù)據(jù) -->
        <property name="myList">
            <list>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </list>
        </property>
        <!-- 注入Map數(shù)據(jù) -->
        <property name="myMap">
            <map>
                <entry key="testA" value="aaa"></entry>
                <entry key="testB" value="bbb"></entry>
            </map>
        </property>
    </bean>
</beans>

到此這篇關(guān)于Spring的IOC解決程序耦合的實現(xiàn)的文章就介紹到這了,更多相關(guān)Spring IOC程序耦合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:

相關(guān)文章

  • seata-1.4.0安裝及在springcloud中使用詳解

    seata-1.4.0安裝及在springcloud中使用詳解

    這篇文章主要介紹了seata-1.4.0安裝及在springcloud中使用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • springboot設(shè)置加載靜態(tài)資源的路徑(spring.resources.static-locations)

    springboot設(shè)置加載靜態(tài)資源的路徑(spring.resources.static-locations)

    這篇文章主要介紹了springboot設(shè)置加載靜態(tài)資源的路徑方式(spring.resources.static-locations),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • springcloud?gateway高級功能之集成apollo后動態(tài)刷新路由方式

    springcloud?gateway高級功能之集成apollo后動態(tài)刷新路由方式

    這篇文章主要介紹了springcloud?gateway高級功能之集成apollo后動態(tài)刷新路由方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringMVC全局異常處理小結(jié)

    SpringMVC全局異常處理小結(jié)

    在開發(fā)中,不管是dao層、service層還是controller層,都有可能拋出異常,在springmvc中,能將所有類型的異常處理從各處理過程解耦出來,既保證了相關(guān)處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護,本文介紹SpringMVC全局異常處理,感興趣的朋友一起看看吧
    2024-03-03
  • IDEA導(dǎo)入jar包的完整實現(xiàn)步驟

    IDEA導(dǎo)入jar包的完整實現(xiàn)步驟

    由于導(dǎo)入jar包項目存在很多不確定的問題,導(dǎo)致每次都需要調(diào)試、配置好多遍,對此特意記錄下來,這篇文章主要給大家介紹了關(guān)于IDEA導(dǎo)入jar包的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • spring rocketmq集成方案

    spring rocketmq集成方案

    本文詳細介紹了如何在Spring Boot項目中集成RocketMQ 5.x,包括前置條件、核心依賴、配置、生產(chǎn)者和消費者實現(xiàn)、測試驗證以及關(guān)鍵注意事項,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java中Builder模式的實現(xiàn)詳解

    Java中Builder模式的實現(xiàn)詳解

    在設(shè)計模式中對Builder模式的定義是用于構(gòu)建復(fù)雜對象的一種模式,所構(gòu)建的對象往往需要多步初始化或賦值才能完成。下面這篇文章主要給大家介紹了在Java各個版本中Builder模式實現(xiàn)的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考學(xué)習(xí)。
    2017-05-05
  • Servlet關(guān)于RequestDispatcher的原理詳解

    Servlet關(guān)于RequestDispatcher的原理詳解

    這篇文章主要介紹了Servlet關(guān)于RequestDispatcher的原理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • MybatisPlus分頁失效不起作用的解決

    MybatisPlus分頁失效不起作用的解決

    在使用MybatisPlus的selectPage時發(fā)現(xiàn)分頁不起作用,每次返回的都是全部的數(shù)據(jù),本文就來介紹一下MybatisPlus分頁失效不起作用的解決,感興趣的可以了解一下
    2024-03-03
  • Java線程中start和run方法全面解析

    Java線程中start和run方法全面解析

    這篇文章主要介紹了Java線程中start和run方法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08

最新評論

金坛市| 饶河县| 额济纳旗| 彩票| 武安市| 新巴尔虎左旗| 宜君县| 敦化市| 交口县| 凉山| 彭州市| 渝中区| 伊宁县| 年辖:市辖区| 若尔盖县| 永州市| 法库县| 比如县| 光泽县| 涡阳县| 河曲县| 镇远县| 调兵山市| 昭苏县| 临清市| 拜泉县| 贡嘎县| 洮南市| 邓州市| 阿巴嘎旗| 金阳县| 宝清县| 镇巴县| 永吉县| 龙州县| 合水县| 内乡县| 凌云县| 元谋县| 民乐县| 海阳市|