Spring更簡(jiǎn)單的存儲(chǔ)方式與獲取方式詳解
存儲(chǔ)方式(注解)
使用注解的方式存儲(chǔ)業(yè)務(wù)對(duì)象到Spring中會(huì)更簡(jiǎn)單
1.配置spring.xml設(shè)置spring存入對(duì)象的根路徑 ,目的是讓Spring項(xiàng)目啟動(dòng)后,能夠去根路徑下的所有類(lèi)中掃描并標(biāo)識(shí)為需要存儲(chǔ)到Spring中的對(duì)象存儲(chǔ)到Spring中
<?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:content="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置一下:bean注解掃描的根路徑(方面后面更簡(jiǎn)單存儲(chǔ)對(duì)象到spring容器)--> <content:component-scan base-package="com.bit"></content:component-scan> </beans>
2.使用注解將bean對(duì)象存儲(chǔ)到spring框架中
注解分類(lèi):
1.類(lèi)注解:@Controller【控制器】,@Service【業(yè)務(wù)邏輯層】,@Repository【數(shù)據(jù)持久層】,@Component【組件類(lèi)】,@Configuration【配置類(lèi)】
2.方法注解:@Bean(必須配合類(lèi)注解使用)
@Controller
創(chuàng)建bean對(duì)象
package com.bit; import org.springframework.stereotype.Controller; /** * Description: * User: lmp * Date: 2022-05-24 * Time: 19:23 */ @Controller public class UserController { public void sayHi(String name){ System.out.println("Hi controller"+name); } }
讀取bean對(duì)象
package com.bit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Description: * User: lmp * Date: 2022-05-24 * Time: 15:25 */ public class App { public static void main(String[] args) { //先獲取對(duì)象的Spring ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); //從 Spring 中獲得存入的對(duì)象(將存入的類(lèi)首字母小寫(xiě),若類(lèi)名字符大于2個(gè),并且前兩個(gè)字符都是大寫(xiě),那么使用原類(lèi)名作為bean的名字) UserController userController = context.getBean("userController",UserController.class); userController.sayHi("Bit"); } }
@Service
和controller一樣
@Repository
和controller一樣
@Configuration
和controller一樣
@Component
和controller一樣
方法注解@Bean
一般寫(xiě)在組件里面,方法注解必須配合類(lèi)注解使用,因?yàn)镾pring默認(rèn)是類(lèi)級(jí)別的掃描
package com.bit.util; import com.bit.Model.User; import com.sun.org.apache.bcel.internal.generic.RETURN; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; /** * Description: * User: lmp * Date: 2022-05-24 * Time: 21:14 */ @Component public class UserBean { @Bean //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中 public User user1(){ User user = new User(); user.setId(1); user.setName("zhangsan"); user.setAge(18); return user; } }
重命名bean
可以通過(guò)設(shè)置name屬性給Bean對(duì)象進(jìn)行重命名操作
@Bean重命名可以有多個(gè)別名,但是當(dāng)指定別名之后,方法名就取不到對(duì)象了
package com.bit.util; import com.bit.Model.User; import com.sun.org.apache.bcel.internal.generic.RETURN; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; /** * Description: * User: lmp * Date: 2022-05-24 * Time: 21:14 */ @Component public class UserBean { @Bean(name = {"u1","userInfo1"}) //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中 public User user1(){ User user = new User(); user.setId(1); user.setName("zhangsan"); user.setAge(18); return user; } @Bean(name = "u2") //將當(dāng)前對(duì)象存儲(chǔ)在Spring當(dāng)中 public User user2(){ User user = new User(); user.setId(1); user.setName("lisi"); user.setAge(18); return user; } }
五大注解之間的關(guān)系
從業(yè)務(wù)邏輯來(lái)說(shuō),@Controller是@Component的子類(lèi),同樣,@Service,@Repository,@Configuration都是@Component的子類(lèi)
從Spring中獲取對(duì)象
@Autowired
屬性注入(屬性注冊(cè))
Setter注入
構(gòu)造方法注入
注入注解
@Qualifier 可以解決同一個(gè)類(lèi)有兩個(gè)以上的對(duì)象的情況,可以使用這個(gè)注解,它相當(dāng)于@Resource(name=“”)
三種注入的優(yōu)缺點(diǎn)
- 屬性注入的優(yōu)點(diǎn)是簡(jiǎn)潔,只適用于IoC容器,如果非IOC容器不可用,會(huì)報(bào)空指針異常
- 構(gòu)造方法注入是Spring推薦的注入方式,缺點(diǎn)是如果有多個(gè)注入會(huì)顯得比較臃腫
- Setter方式是Spring前期版本推薦的注入方式,但通用性不如構(gòu)造方法,
@Resource
對(duì)象注入的另一種方式:使用@Resource注解,但Resource注解不能使用在構(gòu)造方法上
@Autowired和@Resource的區(qū)別
1.出身不同,他們所屬的包不一樣,Resource屬于javajdk中的javax包中,而Autowired屬于springframework包中的
2.作用范圍不同,Resource不可以使用在構(gòu)造方法注解上,而autowired可以
3.功能不同 Resource可以使用name屬性,從而完成對(duì)象的別名注入,而autowired沒(méi)有。
總結(jié)
到此這篇關(guān)于Spring更簡(jiǎn)單的存儲(chǔ)方式與獲取方式的文章就介紹到這了,更多相關(guān)Spring存儲(chǔ)與獲取方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot中靜態(tài)文件的兩種引入方式總結(jié)
這篇文章主要介紹了Springboot中靜態(tài)文件的兩種引入方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java中使用增強(qiáng)for循環(huán)的實(shí)例方法
在本篇文章里小編給大家整理是的關(guān)于Java中如何使用增強(qiáng)for循環(huán)的實(shí)例內(nèi)容以及相關(guān)代碼,需要的朋友們可以學(xué)習(xí)下。2019-08-08Springboot以Repository方式整合Redis的方法
這篇文章主要介紹了Springboot以Repository方式整合Redis的方法,本文通過(guò)圖文并茂實(shí)例詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04java如何根據(jù)用戶(hù)請(qǐng)求獲取ip地址并解析省市信息
根據(jù)當(dāng)前用戶(hù)本地IP地址,查詢(xún)IP地址庫(kù),獲取IP所在的省市信息,目前有多種方式實(shí)現(xiàn)該功能,這篇文章主要給大家介紹了關(guān)于java如何根據(jù)用戶(hù)請(qǐng)求獲取ip地址并解析省市信息的相關(guān)資料,需要的朋友可以參考下2023-12-12Reactor3 Map與FlatMap的區(qū)別示例詳解
這篇文章主要為大家介紹了Reactor3 Map與FlatMap的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08mybatis Map查詢(xún)結(jié)果下劃線(xiàn)轉(zhuǎn)駝峰的實(shí)例
這篇文章主要介紹了mybatis Map查詢(xún)結(jié)果下劃線(xiàn)轉(zhuǎn)駝峰的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09SpringBoot項(xiàng)目修改訪問(wèn)端口和訪問(wèn)路徑的方法
這篇文章主要介紹了SpringBoot項(xiàng)目修改訪問(wèn)端口和訪問(wèn)路徑的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12