Spring更簡單的存儲方式與獲取方式詳解
存儲方式(註解)
使用註解的方式存儲業務對象到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【業務邏輯層】,@Repository【數據持久層】,@Component【組件類】,@Configuration【配置類】
2.方法註解:@Bean(必須配合類註解使用)
@Controller
創建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; } }
五大註解之間的關系
從業務邏輯來說,@Controller是@Component的子類,同樣,@Service,@Repository,@Configuration都是@Component的子類
從Spring中獲取對象
@Autowired
屬性註入(屬性註冊)
Setter註入
構造方法註入
註入註解
@Qualifier 可以解決同一個類有兩個以上的對象的情況,可以使用這個註解,它相當於@Resource(name=“”)
三種註入的優缺點
- 屬性註入的優點是簡潔,隻適用於IoC容器,如果非IOC容器不可用,會報空指針異常
- 構造方法註入是Spring推薦的註入方式,缺點是如果有多個註入會顯得比較臃腫
- Setter方式是Spring前期版本推薦的註入方式,但通用性不如構造方法,
@Resource
對象註入的另一種方式:使用@Resource註解,但Resource註解不能使用在構造方法上
@Autowired和@Resource的區別
1.出身不同,他們所屬的包不一樣,Resource屬於javajdk中的javax包中,而Autowired屬於springframework包中的
2.作用范圍不同,Resource不可以使用在構造方法註解上,而autowired可以
3.功能不同 Resource可以使用name屬性,從而完成對象的別名註入,而autowired沒有。
總結
到此這篇關於Spring更簡單的存儲方式與獲取方式的文章就介紹到這瞭,更多相關Spring存儲與獲取方式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Spring五大類註解讀取存儲Bean對象的方法
- 詳解spring如何使用註解開發
- Spring超詳細講解註解開發
- 詳解Spring 中 Bean 對象的存儲和取出
- Java之Spring註解開發案例詳解