亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?IOC注入的兩種方式詳解以及代碼示例

 更新時間:2023年08月08日 09:42:53   作者:橙橙愛學習  
在Spring框架中,依賴注入(Dependency?Injection,DI)是通過控制反轉(zhuǎn)(Inversion?of?Control,IOC)實現(xiàn)的,Spring提供了多種方式來實現(xiàn)IOC注入,本文就給大家介紹兩種注入的方式:基于XML和基于注解,文中有詳細的代碼示例,需要的朋友可以參考下

Ioc是Spring全家桶各個功能模塊的基礎,創(chuàng)建對象的容器。

AOP也是以IoC為基礎,AOP是面向切面編程,抽象化的面向?qū)ο?/p>

AOP功能:打印日志,事務,權限處理

IoC

翻譯為控制反轉(zhuǎn),即將對象的創(chuàng)建進行反轉(zhuǎn)。常規(guī)情況下,對象都是開發(fā)者手動創(chuàng)建的,使用IoC開發(fā)者不再需要創(chuàng)建對象,而是由IoC容器根據(jù)需求自動創(chuàng)建項目所需要的對象

  • 不用IoC:所有對象開發(fā)者自己創(chuàng)建;
  • 使用IoC:對象不用開發(fā)者創(chuàng)建,而是交給spring框架完成

下面我們使用代碼來演示:

1.1、首先我們需要引入依賴

pom.xml

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.20</version>
        </dependency>

1.2 有兩種方法創(chuàng)建

1.2.1 基于XML:

開發(fā)者把需要的對象在XML中進行配置,Spring框架讀取這個配置文件,根據(jù)配置文件的內(nèi)容來創(chuàng)建對象

(1)創(chuàng)建DataConfig類,同時加上@Data注解

/**
 * @author 王凱欣
 */
@Data
public class DataConfig {
    private String url;
    private String driverName;
    private String username;
    private String password;
}

(2)新建spring.xml文件,并配置如下內(nèi)容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/aop
                           http://www.springframework.org/schema/aop/spring-aop.xsd">
    <bean class="com.wkx.ioc.DataConfig" id="config">
        <property name="driverName" value="Driver"></property>
        <property name="url" value="localhost:8080"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
</beans>
 

這樣可以通過反射獲取到DataConfig類,存入id為config的對象中,并使用<property>標簽來為變量賦值。 

(3)新建Test類

package com.wkx.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        System.out.println(context.getBean("config"));
    }
}

通過上面的方式來獲取到DataConfig

運行后輸出

1.2.2 基于注解(常用)

基于注解有兩種方式,

  • 配置類
  • 掃包+注解

第一種:配置類

用一個Java來替代XML文件,把在XML中配置的內(nèi)容放到配置類

(1)添加BeanConfiguration配置類

@Configuration
public class BeanConfiguration {
    @Bean(name = "config")
    public DataConfig dataConfig(){
        DataConfig dataConfig = new DataConfig();
        dataConfig.setDriverName("Driver");
        dataConfig.setUrl("localhost:3306/dbname");
        dataConfig.setUsername("root");
        dataConfig.setPassword("root");
        return dataConfig;
    }
}

@Configration注解表示這是個配置類,啟動時加載

@Bean表示加載時去調(diào)用dataConfig,然后將返回的對象DataConfig放入到IoC容器中,供開發(fā)者使用。后面的name相當于id,也可以用value替代

(2)編寫Test類

public class Test {
    public static void main(String[] args) {
    //參數(shù)可以是類名.class,也可使用包名
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.wkx.configuration");
    //這里傳入的時前面我們設置的Bean的name/value,如果不設置的話,可以傳方法名,或接口名
        System.out.println(context.getBean("config"));
    }
}

第二種:掃包+注解

更簡單的方式,不再需要依賴于XML或者配置類,而是直接將bean的創(chuàng)建交給目標類,在目標類添加注解來創(chuàng)建

(1)給DataConfig添加@Component注解,目的是告訴spring框架,現(xiàn)在這個類需要被注入到IoC。然后spring讀到這個類的時候,就會將這個類創(chuàng)建對象,注入到IoC,@Value注解用來給類中的變量賦值

@Data
@Component
public class DataConfig {
    @Value("localhost:3306")
    private String url;
    @Value("Driver")
    private String driverName;
    @Value("root")
    private String username;
    @Value("root")
    private String password;
}

(2)掃包,掃描DataConfi,獲取到我們注入的值

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.wkx.ioc");
        System.out.println(context.getBean(DataConfig.class));
    }
}

IoC除了自動創(chuàng)建對象。還有能夠依賴注入

那什么是依賴注入呢?

比如A中有B的對象,然后我們創(chuàng)建A和B兩個對象,對會自動的把B裝入A

下面我舉個例子

(1)聲明一個全局變量類GlobalConfig,里面包含DataConfig對象,因此要完成依賴注入。此時可以使用@Autowired注解,表示自動裝載,他就會自己去IoC里查找

@Data
@Component
public class GlobalConfig {
    @Value("8080")
    private String prot;
    @Value("/")
    private String path;
    @Autowired
    private DataConfig dataConfig;
}

其中,@Autowired注解表示通過類型byType注入,如果要通過名字注入,給他取名字,可以加上@Qualifier("name")來完成名稱的映射,同時,DataConfig中的@Component("name"),兩個name要保持一致

(2)再去掃描包

 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.wkx.ioc");
        System.out.println(context.getBean(GlobalConfig.class));

這樣就可以獲取到了

到此這篇關于Spring IOC注入的兩種方式詳解以及代碼示例的文章就介紹到這了,更多相關Spring IOC注入方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺析非對稱加密在接口參數(shù)中的實現(xiàn)

    淺析非對稱加密在接口參數(shù)中的實現(xiàn)

    接口層做數(shù)據(jù)加密應該算是老生常談的一件事了,業(yè)界用的比較多的,不外乎是對稱加密,非對稱加密以及兩者的結(jié)合。本文就來聊聊非對稱加密在接口參數(shù)中的實現(xiàn),希望對大家有所幫助
    2023-02-02
  • java實習--每天打卡十道面試題!

    java實習--每天打卡十道面試題!

    臨近秋招,備戰(zhàn)暑期實習,祝大家每天進步億點點!本篇文章準備了十道java的常用面試題,希望能夠給大家提供幫助,最后祝大家面試成功,進入自己心儀的大廠
    2021-06-06
  • Java中的Semaphore信號量簡析

    Java中的Semaphore信號量簡析

    這篇文章主要介紹了Java中的Semaphore信號量簡析,Semaphore:信號量,用來限制能同時訪問共享資源的線程上限,使用Semaphore實現(xiàn)簡單連接池,對比享元模式下的實現(xiàn)(用wait和notify),性能和可讀性要更好,需要的朋友可以參考下
    2023-12-12
  • CCF考試試題之門禁系統(tǒng)java解題代碼

    CCF考試試題之門禁系統(tǒng)java解題代碼

    這篇文章主要為大家詳細介紹了CCF考試試題之門禁系統(tǒng)java解題代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    Java實現(xiàn)圖書管理系統(tǒng)的示例代碼

    這篇文章將通過Java實現(xiàn)一個簡答的圖書管理系統(tǒng),本圖書管理系統(tǒng)用對象數(shù)組的方式來提供操作方法,比較特別,建議新手學習,這對理解Java面向?qū)ο笥泻艽髱椭?/div> 2022-11-11
  • Java生成UUID的常用方式示例代碼

    Java生成UUID的常用方式示例代碼

    UUID保證對在同一時空中的所有機器都是唯一的,通常平臺會提供生成的API,按照開放軟件基金會(OSF)制定的標準計算,用到了以太網(wǎng)卡地址、納秒級時間、芯片ID碼和許多可能的數(shù)字,下面這篇文章主要給大家介紹了關于Java生成UUID的常用方式,需要的朋友可以參考下
    2023-05-05
  • 實現(xiàn)了基于TCP的Java Socket編程實例代碼

    實現(xiàn)了基于TCP的Java Socket編程實例代碼

    這篇文章主要介紹了基于TCP的Java Socket編程實例代碼,有需要的朋友可以參考一下
    2013-12-12
  • 使用mybatis報Invalid bound statement解決分析

    使用mybatis報Invalid bound statement解決分析

    這篇文章主要為大家介紹了使用mybatis報Invalid bound statement原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹

    Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹

    Spring在3.1版本,就提供了一條基于注解的緩存策略,實際使用起來還是很絲滑的,本文將針對幾個常用的注解進行簡單的介紹說明,有需要的小伙伴可以嘗試一下
    2021-07-07
  • 快速學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    快速學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    這篇文章主要幫助大家快速學習JavaWeb中監(jiān)聽器(Listener)的使用方法,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論