Spring更簡單的存儲方式與獲取方式詳解
存儲方式(注解)
使用注解的方式存儲業(yè)務對象到Spring中會更簡單
1.配置spring.xml設置spring存入對象的根路徑 ,目的是讓Spring項目啟動后,能夠去根路徑下的所有類中掃描并標識為需要存儲到Spring中的對象存儲到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注解掃描的根路徑(方面后面更簡單存儲對象到spring容器)--> <content:component-scan base-package="com.bit"></content:component-scan> </beans>
2.使用注解將bean對象存儲到spring框架中
注解分類:
1.類注解:@Controller【控制器】,@Service【業(yè)務邏輯層】,@Repository【數(shù)據(jù)持久層】,@Component【組件類】,@Configuration【配置類】
2.方法注解:@Bean(必須配合類注解使用)
@Controller
創(chuàng)建bean對象
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對象
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) { //先獲取對象的Spring ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); //從 Spring 中獲得存入的對象(將存入的類首字母小寫,若類名字符大于2個,并且前兩個字符都是大寫,那么使用原類名作為bean的名字) UserController userController = context.getBean("userController",UserController.class); userController.sayHi("Bit"); } }
@Service
和controller一樣
@Repository
和controller一樣
@Configuration
和controller一樣
@Component
和controller一樣
方法注解@Bean
一般寫在組件里面,方法注解必須配合類注解使用,因為Spring默認是類級別的掃描
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 //將當前對象存儲在Spring當中 public User user1(){ User user = new User(); user.setId(1); user.setName("zhangsan"); user.setAge(18); return user; } }
重命名bean
可以通過設置name屬性給Bean對象進行重命名操作
@Bean重命名可以有多個別名,但是當指定別名之后,方法名就取不到對象了
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"}) //將當前對象存儲在Spring當中 public User user1(){ User user = new User(); user.setId(1); user.setName("zhangsan"); user.setAge(18); return user; } @Bean(name = "u2") //將當前對象存儲在Spring當中 public User user2(){ User user = new User(); user.setId(1); user.setName("lisi"); user.setAge(18); return user; } }
五大注解之間的關系
從業(yè)務邏輯來說,@Controller是@Component的子類,同樣,@Service,@Repository,@Configuration都是@Component的子類
從Spring中獲取對象
@Autowired
屬性注入(屬性注冊)
Setter注入
構造方法注入
注入注解
@Qualifier 可以解決同一個類有兩個以上的對象的情況,可以使用這個注解,它相當于@Resource(name=“”)
三種注入的優(yōu)缺點
- 屬性注入的優(yōu)點是簡潔,只適用于IoC容器,如果非IOC容器不可用,會報空指針異常
- 構造方法注入是Spring推薦的注入方式,缺點是如果有多個注入會顯得比較臃腫
- Setter方式是Spring前期版本推薦的注入方式,但通用性不如構造方法,
@Resource
對象注入的另一種方式:使用@Resource注解,但Resource注解不能使用在構造方法上
@Autowired和@Resource的區(qū)別
1.出身不同,他們所屬的包不一樣,Resource屬于javajdk中的javax包中,而Autowired屬于springframework包中的
2.作用范圍不同,Resource不可以使用在構造方法注解上,而autowired可以
3.功能不同 Resource可以使用name屬性,從而完成對象的別名注入,而autowired沒有。
總結
到此這篇關于Spring更簡單的存儲方式與獲取方式的文章就介紹到這了,更多相關Spring存儲與獲取方式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot以Repository方式整合Redis的方法
這篇文章主要介紹了Springboot以Repository方式整合Redis的方法,本文通過圖文并茂實例詳解給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04Reactor3 Map與FlatMap的區(qū)別示例詳解
這篇文章主要為大家介紹了Reactor3 Map與FlatMap的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08