Java Spring-IOC容器與Bean管理之基于注解的方式案例詳解
Spring-IOC容器-Bean管理-基于注解方式
什么是注解?
(1)注解是代碼特殊標(biāo)記,格式:@注解名稱(屬性名稱=屬性值, 屬性名稱=屬性值…)
(2)使用注解,注解作用在類上面,方法上面,屬性上面
(3)使用注解目的:簡(jiǎn)化 xml 配置
Spring 針對(duì) Bean 管理中創(chuàng)建對(duì)象提供注解
下面四個(gè)注解功能是一樣的,都可以用來(lái)創(chuàng)建 bean 實(shí)例
(1)@Component
(2)@Service
(3)@Controller
(4)@Repository
基于注解方式實(shí)現(xiàn)對(duì)象創(chuàng)建
①引入依賴(引入spring-aop jar包)
②開(kāi)啟組件掃描
<!--開(kāi)啟組件掃描 1 如果掃描多個(gè)包,多個(gè)包使用逗號(hào)隔開(kāi) 2 掃描包上層目錄 --> <context:component-scan base-package="com.atguigu"></context:component-scan>
③創(chuàng)建類,在類上面添加創(chuàng)建對(duì)象注解
//在注解里面 value 屬性值可以省略不寫(xiě), //默認(rèn)值是類名稱,首字母小寫(xiě) //UserService -- userService @Component(value = "userService") //注解等同于XML配置文件:<bean id="userService" class=".."/> public class UserService { public void add() { System.out.println("service add......."); } }
開(kāi)啟組件掃描細(xì)節(jié)配置
<!--示例 1 use-default-filters="false" 表示現(xiàn)在不使用默認(rèn) filter,自己配置 filter context:include-filter ,設(shè)置掃描哪些內(nèi)容 --> <context:component-scan base-package="com.atguigu" use-defaultfilters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/><!--代表只掃描Controller注解的類--> </context:component-scan> <!--示例 2 下面配置掃描包所有內(nèi)容 context:exclude-filter: 設(shè)置哪些內(nèi)容不進(jìn)行掃描 --> <context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/><!--表示Controller注解的類之外一切都進(jìn)行掃描--> </context:component-scan>
基于注解方式實(shí)現(xiàn)屬性注入
① @Autowired:根據(jù)屬性類型進(jìn)行自動(dòng)裝配
(1)第一步 把 service 和 dao 對(duì)象創(chuàng)建,在 service 和 dao 類添加創(chuàng)建對(duì)象注解。
(2)第二步 在 service 注入 dao 對(duì)象,在 service 類添加 dao 類型屬性,在屬性上面使用注解。
@Service public class UserService { //定義 dao 類型屬性 //不需要添加 set 方法 //添加注入屬性注解 @Autowired private UserDao userDao; public void add() { System.out.println("service add......."); userDao.add(); } } //Dao實(shí)現(xiàn)類 @Repository //@Repository(value = "userDaoImpl1") public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("dao add....."); } }
② @Qualifier:根據(jù)名稱進(jìn)行注入,這個(gè)@Qualifier 注解的使用,和上面@Autowired 一起使用
//定義 dao 類型屬性 //不需要添加 set 方法 //添加注入屬性注解 @Autowired //根據(jù)類型進(jìn)行注入 //根據(jù)名稱進(jìn)行注入(目的在于區(qū)別同一接口下有多個(gè)實(shí)現(xiàn)類,根據(jù)類型就無(wú)法選擇,從而出錯(cuò)?。? @Qualifier(value = "userDaoImpl1") private UserDao userDao;
③ @Resource:可以根據(jù)類型注入,也可以根據(jù)名稱注入(它屬于javax包下的注解,不推薦使用!)
//@Resource //根據(jù)類型進(jìn)行注入 @Resource(name = "userDaoImpl1") //根據(jù)名稱進(jìn)行注入 private UserDao userDao;
④ @Value:注入普通類型屬性
@Value(value = "abc") private String name
完全注解開(kāi)發(fā)
(1)創(chuàng)建配置類,替代 xml 配置文件
@Configuration //作為配置類,替代 xml 配置文件 @ComponentScan(basePackages = {"com.atguigu"}) public class SpringConfig { }
(2)編寫(xiě)測(cè)試類
@Test public void testService2() { //加載配置類 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean("userService", UserService.class); System.out.println(userService); userService.add(); }
到此這篇關(guān)于Java Spring-IOC容器與Bean管理之基于注解的方式案例詳解的文章就介紹到這了,更多相關(guān)Java Spring-IOC容器與Bean管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
hashMap擴(kuò)容時(shí)應(yīng)該注意這些死循環(huán)問(wèn)題
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著hashMap擴(kuò)容時(shí)的死循環(huán)問(wèn)題展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06arthas排查jvm中CPU占用過(guò)高問(wèn)題解決
這篇文章主要介紹了arthas排查jvm中CPU占用過(guò)高問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09詳解hibernate雙向多對(duì)多關(guān)聯(lián)映射XML與注解版
本篇文章主要介紹了詳解hibernate雙向多對(duì)多關(guān)聯(lián)映射XML與注解版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05java文字轉(zhuǎn)語(yǔ)音播報(bào)功能的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于java文字轉(zhuǎn)語(yǔ)音播報(bào)功能的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07使用Swagger時(shí)Controller中api接口顯示不全的問(wèn)題分析及解決
swagger是一個(gè)十分好用的api接口管理、測(cè)試框架,現(xiàn)在越來(lái)越多的人使用這個(gè)做接口的測(cè)試和管理,但經(jīng)常遇到Controller中的api接口顯示不全的問(wèn)題,所以本文給大家詳細(xì)分析了問(wèn)題以及解決方法,需要的朋友可以參考下2024-02-02詳解java操作Redis數(shù)據(jù)庫(kù)的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoo
這篇文章主要介紹了java操作Redis數(shù)據(jù)庫(kù)的redis工具,包括RedisUtil,jedis工具JedisUtil,JedisPoolUtil工具,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08