欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring依賴注入與第三方Bean管理基礎(chǔ)詳解

 更新時間:2022年12月23日 10:59:29   作者:給我手牽你走~~  
依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在 傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例

1. 注解開發(fā)依賴注入

1.1 使用@Autowired注解開啟自動裝配模式

@Service
public class BookServiceImpl implements BookService {
    //@Autowired:注入引用類型,自動裝配模式,默認按類型裝配
    @Autowired
    private BookDao bookDao;
    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

說明:不管是使用配置文件還是配置類,都必須進行對應(yīng)的Spring注解包掃描才可以使用。@Autowired默認按照類型自動裝配,如果IOC容器中同類的Bean有多個,那么默認按照變量名和Bean的名稱匹配,建議使用@Qualifier注解指定要裝配的bean名稱

注意:自動裝配基于反射設(shè)計創(chuàng)建對象并暴力反射對應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無需提供setter方法。

1.2 使用@Qualifier注解指定要裝配的bean名稱

目的:解決IOC容器中同類型Bean有多個裝配哪一個的問題

@Service
public class BookServiceImpl implements BookService {
    //@Autowired:注入引用類型,自動裝配模式,默認按類型裝配
    @Autowired
    //@Qualifier:自動裝配bean時按bean名稱裝配
    @Qualifier("bookDao")
    private BookDao bookDao;
    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

注意:@Qualifier注解無法單獨使用,必須配合@Autowired注解使用

1.3 使用@Value實現(xiàn)簡單類型注入

package com.lin.dao.impl;
import com.lin.dao.BookDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
@Repository
public class BookDaoImpl implements BookDao {
    @Value("${name}")
    private String name;
    public void save() {
        System.out.println("Dao中的save"+" "+name);
    }
}

以上@Value注解中使用${name}從屬性文件中讀取name值,那么就需要在配置類或者配置文件中加載屬性文件。

@Configuration
@ComponentScan("com.itheima")
//@PropertySource加載properties配置文件
@PropertySource({"classpath:jdbc.properties"}) //{}可以省略不寫
public class SpringConfig {
}

注意:@PropertySource()中加載多文件請使用數(shù)組格式配置,不允許使用通配符*

2. 注解開發(fā)管理第三方Bean

2.1 單獨定義配置類

public class JdbcConfig {
    //@Bean:表示當前方法的返回值是一個bean對象,添加到IOC容器中
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername("root");
        ds.setPassword("root");
        return ds;
    }
}

2.2 將獨立的配置類加入核心配置

@Import注解導入式

@Configuration
@ComponentScan("com.itheima")
//@Import:導入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}

3.注解開發(fā)為第三方Bean注入資源

3.1 簡單類型依賴注入

3.1.1 新建jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/db1
jdbc.username=root
jdbc.password=1234

3.1.2 在配置類或者配置文件中加載屬性文件。

3.1.3 使用EL表達式讀取properties屬性文件中的內(nèi)容

package com.lin.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driverName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("jdbc.password")
    private String password;
    @Bean
    public DataSource getDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverName);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;
    }
}

3.2 引用類型依賴注入

//Spring會自動從IOC容器中找到BookDao對象賦值給參數(shù)bookDao變量,如果沒有就會報錯。
@Bean 
public DataSource dataSource(BookDao bookDao){
    System.out.println(bookDao);
    DruidDataSource ds = new DruidDataSource();
    ds.setDriverClassName(driver);
    ds.setUrl(url);
    ds.setUsername(userName);
    ds.setPassword(password);
    return ds;
}

說明:引用類型注入只需要為bean定義方法設(shè)置形參即可,容器會根據(jù)類型自動裝配對象

4. 注解開發(fā)總結(jié)

到此這篇關(guān)于Spring依賴注入與第三方Bean管理基礎(chǔ)詳解的文章就介紹到這了,更多相關(guān)Spring依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java使用GUI實現(xiàn)貪吃蛇游戲

    java使用GUI實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了java使用GUI實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • java之抽象類和繼承抽象類解讀

    java之抽象類和繼承抽象類解讀

    這篇文章主要介紹了java之抽象類和繼承抽象類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • idea創(chuàng)建maven父子工程導致子工程無法導入父工程依賴

    idea創(chuàng)建maven父子工程導致子工程無法導入父工程依賴

    創(chuàng)建maven父子工程時遇到一個問題,本文主要介紹了idea創(chuàng)建maven父子工程導致子工程無法導入父工程依賴,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能

    SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能

    這篇文章主要介紹了SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot中讀取application.properties配置文件的方法

    SpringBoot中讀取application.properties配置文件的方法

    這篇文章主要介紹了SpringBoot中讀取application.properties配置文件的三種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • Java將文件分割為多個子文件再將子文件合并成原始文件的示例

    Java將文件分割為多個子文件再將子文件合并成原始文件的示例

    本篇文章主要介紹了Java將文件分割為多個子文件再將子文件合并成原始文件的示例,具有一定的參考價值,有興趣的可以了解一下。
    2017-02-02
  • Java字符串常量池示例詳解

    Java字符串常量池示例詳解

    作為最基礎(chǔ)的引用數(shù)據(jù)類型,Java設(shè)計者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作方法

    IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作方法

    這篇文章主要介紹了IntelliJ?IDEA2022中的Java文檔注釋設(shè)置、操作詳述,本文通過圖文并茂的方式給大家介紹IDEA2022?文檔注釋設(shè)置方法,需要的朋友可以參考下
    2022-08-08
  • springMVC的RequestMapping請求不到路徑的解決

    springMVC的RequestMapping請求不到路徑的解決

    這篇文章主要介紹了springMVC的RequestMapping請求不到路徑的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解Java8如何使用Lambda表達式進行比較

    詳解Java8如何使用Lambda表達式進行比較

    Lambda表達式,也可稱為閉包,是java8的新特性,作用是取代大部分內(nèi)部類,優(yōu)化java代碼結(jié)構(gòu),讓代碼變得更加簡潔緊湊。本文將利用Lambda表達式進行排序比較,需要的可以參考一下
    2022-01-01

最新評論