Spring IOC的相關(guān)注解運(yùn)用詳解
一、@Configuration
此時(shí)基于注解的IOC配置已經(jīng)完成,但是我們依然離不開(kāi)Spring的xml配置文件。接下來(lái)我們脫離bean.xml,使用純注解實(shí)現(xiàn)IOC。
在真實(shí)開(kāi)發(fā)中,我們一般還是會(huì)保留xml配置文件,很多情況下使用配置文件更加方便。 純注解實(shí)現(xiàn)IOC需要一個(gè)Java類(lèi)代替xml文件。這個(gè)Java類(lèi)上方需要添加@Configuration,表示該類(lèi)是一個(gè)配置類(lèi),作用是代替配置文件。
SpringConfig配置類(lèi)
package com.example; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { }
二、@ComponentScan
1. 說(shuō)明
作用:指定spring在初始化容器時(shí)掃描的包。 位置:配置類(lèi)上方
SpringConfig配置類(lèi)
package com.example; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.example") public class SpringConfig { }
2. 測(cè)試方法
// 測(cè)試純注解 @Test public void t4(){ ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); StudentService service = ac.getBean("studentService",StudentService.class); System.out.println(service.findById(8)); }
3. 運(yùn)行結(jié)果
OK,確實(shí)可以。
三、@PropertySource
1. 說(shuō)明
作用:代替配置文件中的 <context:property-placeholder> 掃描配置文件
位置:配置類(lèi)上方
注意:配置文件位置前要加關(guān)鍵字 classpath
JdbcConfig配置類(lèi)
package com.example; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import java.sql.Connection; import java.sql.DriverManager; @Configuration @PropertySource("classpath:db.properties") public class JdbcConfig { @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Override public String toString() { return "JdbcConfig[ " + "username='" + username + '\'' + ", password='" + password + '\'' + " ]"; } }
2. 測(cè)試方法
// 測(cè)試純注解掃描jdbc @Test public void t5(){ ApplicationContext ac = new AnnotationConfigApplicationContext(JdbcConfig.class); JdbcConfig config = (JdbcConfig) ac.getBean("jdbcConfig"); System.out.println(config); }
3. 測(cè)試結(jié)果
OK,也是沒(méi)有問(wèn)題的。
四、@Bean
1. 說(shuō)明
- 作用:將方法的返回值對(duì)象放入Spring容器中。如果想將第三方類(lèi)的對(duì)象放入容器,可以使用@Bean
- 位置:配置類(lèi)的方法上方。
- 屬性:name:給bean對(duì)象設(shè)置id
- 注意:@Bean修飾的方法如果有參數(shù),spring會(huì)根據(jù)參數(shù)類(lèi)型從容器中查找可用對(duì)象。
- 舉例:如果想將jdbc連接對(duì)象放入Spring容器,我們無(wú)法修改Connection源碼添加@Component,此時(shí)就需要使用將@Bean該對(duì)象放入Spring容器
2. 添加驅(qū)動(dòng)依賴(lài)
在pom.xml文件添加依賴(lài)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency>
3.將Connection對(duì)象放入Spring容器
@Bean("connection") public Connection getConnection(){ try{ Class.forName("com.mysql.cj.jdbc.Driver"); return DriverManager.getConnection("jdbc:mysql:///mysql","root","666666"); }catch (Exception e){ e.printStackTrace(); return null; } }
4. 測(cè)試
測(cè)試方法
// 測(cè)試注解bean @Test public void t6(){ ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); Connection connection = (Connection) ac.getBean("connection"); System.out.println(connection); }
運(yùn)行結(jié)果
OK,也是可以成功獲取連接的
五、@Import
1. 說(shuō)明
作用:如果配置過(guò)多,會(huì)有多個(gè)配置類(lèi),該注解可以為主配置類(lèi)導(dǎo)入其他配置類(lèi)
位置:主配置類(lèi)上方
上述我們講的,SpringConfig應(yīng)當(dāng)為主配置類(lèi),所以該注解應(yīng)當(dāng)添加在SpringConfig類(lèi)的上方
package com.example; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @ComponentScan("com.example") @Import(JdbcConfig.class) public class SpringConfig { }
2. 測(cè)試方法
// 測(cè)試純注解 @Test public void t4(){ ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); JdbcConfig jdbcConfig = ac.getBean("jdbcConfig",JdbcConfig.class); System.out.println(jdbcConfig); }
3. 運(yùn)行結(jié)果
OK,確實(shí)也是可以獲取的。說(shuō)明主配置類(lèi)成功導(dǎo)入了。本章Spring IOC的學(xué)習(xí)就到這里了。
到此這篇關(guān)于Spring IOC的相關(guān)注解運(yùn)用詳解的文章就介紹到這了,更多相關(guān)Spring IOC注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談一下數(shù)據(jù)庫(kù)連接池Druid德魯伊
數(shù)據(jù)庫(kù)連接池就是一個(gè)容器持有多個(gè)數(shù)據(jù)庫(kù)連接,當(dāng)程序需要操作數(shù)據(jù)庫(kù)的時(shí)候直接從池中取出連接,使用完之后再還回去,和線程池一個(gè)道理,需要的朋友可以參考下2023-05-05Java多線程Queue、BlockingQueue和使用BlockingQueue實(shí)現(xiàn)生產(chǎn)消費(fèi)者模型方法解析
這篇文章主要介紹了Java多線程Queue、BlockingQueue和使用BlockingQueue實(shí)現(xiàn)生產(chǎn)消費(fèi)者模型方法解析,涉及queue,BlockingQueue等有關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以參考。2017-11-11SpringBoot中添加監(jiān)聽(tīng)器及創(chuàng)建線程的代碼示例
這篇文章主要介紹了SpringBoot中如何添加監(jiān)聽(tīng)器及創(chuàng)建線程,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06詳解Java Fibonacci Search斐波那契搜索算法代碼實(shí)現(xiàn)
這篇文章主要介紹了詳解Java Fibonacci Search斐波那契搜索算法代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10基于Springboot一個(gè)注解搞定數(shù)據(jù)字典的實(shí)踐方案
這篇文章主要介紹了基于Springboot一個(gè)注解搞定數(shù)據(jù)字典問(wèn)題,大致的方向是自定義注解,在序列化的時(shí)候進(jìn)行數(shù)據(jù)處理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析
這篇文章主要介紹了JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析及簡(jiǎn)單處理方法,文中給大家介紹了javaweb中dbutils的使用,需要的朋友可以參考下2017-12-12SpringMvc后臺(tái)接收json數(shù)據(jù)中文亂碼問(wèn)題詳解
這篇文章主要介紹了SpringMvc后臺(tái)接收json數(shù)據(jù)中文亂碼問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09