SpringBoot —— Bean的注入方式

文章目錄

  • 1、組件注解
  • 2、@Component + @Bean
  • 3、@Import(PlaceHolderClass)快速導入一個組件
  • 4、使用Spring提供的FactoryBean注入

1、組件注解

注解描述
@Component組件定義不清晰時候的注解
@Controller控制器層
@Service服務層
@Repository數據層

注:添加注解的類需要與啟動類在同一個包路徑下,如果在別的包下,需要在 啟動類啟動類所在包下的存在以上注解的類 中添加 @ComponentScan 注解。

例如:

啟動類:

package com.springboottest;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@ComponentScan(basePackages = {"com.springtest", "com.springboottest"})
public class SpringbootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTestApplication.class, args);}}

Student類(與啟動類不在同一個包路徑下):

package com.springtest;import lombok.Data;
import org.springframework.stereotype.Component;import java.lang.reflect.Field;@Data
@Component
public class Student {private String name;private String nickName;
}

2、@Component + @Bean

@Component
public class Test {@Beanpublic User user() {return new User();}
}

注:@Bean注解的方法,返回值 User 作為注入的 Bean 對象。


3、@Import(PlaceHolderClass)快速導入一個組件

PlaceHolderClass描述
一般Class直接注入
實現了ImportSelector接口的Class根據返回類的全限定名數組注入
實現了ImportBeanDefinitionRegistrar接口的Class獲取類描述信息,選擇性手動注入
@Configuration
@Import({ImportDemo.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class ImportConfig{@Beanpublic User user(){return new User();}
}
//自定義邏輯返回需要導入的組件
public class MyImportSelector implements ImportSelector {//返回值是導入到容器中的組件全限定名數組@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//當前類的所有注解Set<String> annotationTypes = importingClassMetadata.getAnnotationTypes();System.out.println("當前配置類的注解信息:"+annotationTypes);return new String[]{"com.paopaoedu.springboot.bean.user01","com.paopaoedu.springboot.bean.user02"};}
}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {/*** AnnotationMetadata:當前類的注解信息* BeanDefinitionRegistry:BeanDefinition注冊類;*      把所有需要添加到容器中的bean;調用*      BeanDefinitionRegistry.registerBeanDefinition手工注冊進來*/@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {boolean definition = registry.containsBeanDefinition("com.paopaoedu.springboot.bean.User01");boolean definition2 = registry.containsBeanDefinition("com.paopaoedu.springboot.bean.User02");if(definition && definition2){//創建一個類的BeanDefinition(Bean的描述信息對象)RootBeanDefinition beanDefinition = new RootBeanDefinition(User03.class);//注冊一個Bean,指定bean名registry.registerBeanDefinition("User03", beanDefinition);}}
}

4、使用Spring提供的FactoryBean注入

public class UserFactoryBean implements FactoryBean<User> {// 注入的Bean@Overridepublic User getObject() throws Exception {return new User();}// 注入的Bean類型@Overridepublic Class<?> getObjectType() {return User.class;}// 是否是單例@Overridepublic boolean isSingleton() {return true;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446682.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何保養電池

1&#xff0c;不要在低于0度和高于35度的范圍下使用電池&#xff0c;尤其是高溫環境下對電腦充電&#xff0c;對電池的破壞是不可逆轉的。2&#xff0c;放電過于徹底或者充電過于飽和&#xff0c;也會對電池的容量造成損耗。BMS 調整電池的充放電3&#xff0c;電腦長期不用&…

codeforces 116A-C語言解題報告

116A題目網址 題目解析 1.輸入n(n個循環),每一個循環-a,b;第一個循環只有b;最后一個循環只有-a;求其中在車上的最大人數? 舉例: 輸入: 4 0 3 2 5 4 2 4 0 輸出: 6 2.注意點:因為使用count計數時,count一直在改變,所以再加入一個max變量去記錄count中出現的最大數. 代碼 #…

SpringBoot —— @ComponentScan注解

文章目錄一、作用二、注解屬性說明三、使用方式一、作用 主要是從定義的掃描路徑中&#xff0c;找出標識了需要裝配的類自動裝配到Spring的bean容器中。 簡單的說就是 ComponentScan告訴Spring從哪里找到bean&#xff0c;一旦指定了&#xff0c;Spring就會將指定的包及其下級…

硬盤 相關知識

磁盤存儲數據于軌道上&#xff0c;為了防止數據不被干擾&#xff0c;軌道之間是存在間隙的。如果間隙越小存儲的數據越多&#xff0c;但是對數據的寫入和讀取所使用的磁頭是不一樣的&#xff0c;寫入的磁頭比較寬&#xff0c;讀取的磁頭比較窄。疊瓦式硬盤&#xff0c;將軌道和…

Java 序列化反序列化框架比較

文章目錄一、簡介二、序列化框架1、JDK2、XML序列化3、JSON序列化4、Hessian5、Avro序列化6、Kyro序列化7、Protostuff三、序列化框架對比測試1、對象準備2、JDK方式3、FastJson方式4、Hessian方式5、Protostuff方式6、測試代碼四、總結五、序列化應用場景六、注意事項一、簡介…

C++primer 第 2 章 變量和基本類型

2.1 基本內置類型 算術類型&#xff08;arithmetictype&#xff09;和空類型&#xff08;void&#xff09;在內的基本數據類型。其中算術類型包含了字符、整型數、布爾值和浮點數。空類型不對應具體的值&#xff0c;僅用于一些特殊的場合&#xff0c;例如最常見的是&#xff0…

codeforces 58A-C語言解題報告

58A題目網址 題目解析 1.輸入字符串,問如果刪去其中的一些自發,能否得到hello,如果能就輸出YES,否則輸出NO 舉例: 輸入: ahhellllloou 輸出: YES 2.注意點: 因為C語言沒有java中的匹配字符串,則新建立一個 word[6]“hello”; 在循環中使用word去與s匹配,當匹配到了就 count…

ClickHouse 客戶端命令

文章目錄一、簡介二、常用命令1、連接命令2、SQL語法&#xff08;1&#xff09;查看數據庫列表&#xff08;2&#xff09;查看當前使用的數據庫&#xff08;3&#xff09;查看數據庫中表列表&#xff08;4&#xff09;創建數據庫&#xff08;5&#xff09;創建表&#xff08;6&…

2000年考研英語閱讀理解文章三

文章詳細解析 注意點 1.當作者在文章中寫到:實際問題是:我們從根本上改變了嗎? 說明:我們沒有發生根本上的改變,作者不同意前文中的未來派詩歌 知識點 ----單詞 unhampered adj無阻礙的 finite adj有限的 ink n墨水 corresponding adj相應的,符合的 upsetting adj令人生厭…

SpringBoot 集成Mybatis

文章目錄一、創建SpringBoot項目二、添加Mybatis相關依賴三、數據源配置四、創建事務的模型實體類五、創建和數據庫交互聯系的映射關系類六、創建業務接口和實現類七、創建控制器類八、請求驗證一、創建SpringBoot項目 如何創建詳見&#xff1a;IDEA 創建 SpringBoot 項目 二、…

C++primer 第 3 章 字符串、向量和數組 3.1 命名空間的using聲明 3.2標準庫類型string

引言 除了第2章介紹的內置類型之外,C語言還定義了 -個內容豐富的抽象數據類型庫。其中,string和 vector是兩種最重耍的標準庫類型&#xff0c;前者支持可變長字符串&#xff0c;后者則 表示可變長的集合。還有…種標準庫類型是迭代器&#xff0c;它是string和vector的配套類型…

ClickHouse 四舍五入函數

文章目錄一、round(x[,N])二、floor(x[,N])三、ceil(x[,N]),ceiling(x[,N])四、trunc(x[, N]), truncate(x[, N])一、round(x[,N]) 說明&#xff1a;將值取整到指定的小數位數&#xff0c;該函數按順序返回最近的數字。 語法&#xff1a; round(expression [, decimal_place…

codeforces 59A-C語言解題報告

59A題目網址 題目解析 1.輸入字符串,如果大寫字母最多,則全部輸出為大寫;如果小寫字母多或大小寫字母一樣多,則全部輸出為小寫 舉例: 輸入: maTRIx 輸出: matrix 2.使用a,b兩個變量去記錄大小寫字母的數量 代碼 #include<stdio.h> #include<stdlib.h> #includ…

C++primer 第 3 章 字符串、向量和數組 3 . 3 標準庫類型vector

標準庫類型vector表示對象的集合&#xff0c;其中所有對象的類型都相同。集合中的每個對象都有一個與之對應的索引&#xff0c;索引用于訪問對象。因為vector"容納著”其他對象&#xff0c;所以它也常被稱作容器(container).第 II部將對容器進行更為詳細的介紹。 要想使用…

SpringBoot AOP切面實現

文章目錄一、AOP簡介二、AOP體系與概念三、AOP實例1、創建SpringBoot工程2、添加依賴3、AOP相關注解3.1、Aspect3.2、Pointcut3.2.1、execution()3.2.2、annotation()3.3、Around3.4、Before3.5、After3.6、AfterReturning3.7、AfterThrowing一、AOP簡介 AOP&#xff08;Aspec…

英語口語-文章朗讀Week8 Friday

文章 It is a phenomenon that people are losing trust in each other in today’s society. Some people become selfish,and for interest, they are likely to betray their colleagues,friends, and even their relatives. They tend to cater to those who can benefit …

C++primer 第 3 章 字符串、向量和數組 3 . 4 迭代器介紹

3.4迭代器介紹 我們已經知道可以使用下標運算符來訪問string對象的字符或vector對象的元素&#xff0c;還有另外一種更通用的機制也可以實現同樣的目的&#xff0c;這就是迭代器&#xff08;iterator&#xff09;。在第II部分中將要介紹&#xff0c;除了vector之外&#xff0c…

ClickHouse 函數

文章目錄一、日期函數1、時間或日期截取函數&#xff08;返回非日期&#xff09;2、時間或日期截取函數&#xff08;返回日期&#xff09;3、日期或時間日期生成函數二、類型轉化類函數1、精度保留&#xff08;非四舍五入&#xff09;2、字符串轉化為整數&#xff08;非整數的字…

英語口語-文章朗讀Week9 TuesDay

朗讀文章 People living in ancient times had no alternative but to do housework manually. They fire the wood when they cook,they hand wash clothes with hands; they sweep the floor with brooms. Now, modern inventions come as a great relief to people. We co…

SpringBoot @Value注解

目錄一、非配置文件注入1、注入普通字符串2、注入JAVA系統變量3、注入表達式4、注入其他Bean屬性5、注入文件資源6、注入URL資源二、通過配置文件注入1、注入普通字符串2、注入基本類型3、注入數組類型4、注入List類型5、注入Map類型一、非配置文件注入 1、注入普通字符串 直…