一文讀懂Spring中@Bean注解的核心作用
存儲Bean對象
將對象存儲在 Spring 中,有兩種注解類型可以實(shí)現(xiàn):
類注解:@Controller、@Service、@Repository、@Component、@Configuration 方法注解:@Bean @Controller(控制器存儲)
如下使用@Controller存儲Bean代碼:
@Controller
public class UserController {
public void SayHi(String name){
System.out.println("你好"+name);
}
}使用獲取上下文的方法獲取上面存儲的對象
public class Test {
public static void main(String[] args) {
//獲取spring上下文
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//獲取指定的Bean對象名稱+類型進(jìn)行獲取
UserController userController = (UserController) applicationContext.getBean("userController");
userController.SayHi("zcx");
}
}效果為

@Service(服務(wù)存儲)
如下使用@Service存儲Bean代碼:
@Service
public class UserService {
public void SayHi(String name){
System.out.println("你好"+name);
}
}輸出結(jié)果跟@Controller一樣
@Repository(倉庫存儲)
如下使用@Repository存儲Bean代碼:
@Repository
public class UserRepository {
public void SayHi(String name){
System.out.println("你好"+name);
}
}@Component(組件存儲)
如下使用@Component存儲Bean代碼:
@Component
public class UserComponent {
public void SayHi(String name){
System.out.println("你好"+name);
}
}@Configuration(配置存儲)
如下使用@Configuration存儲Bean代碼:
@Configuration
public class UserConfiguration {
public void SayHi(String name){
System.out.println("你好"+name);
}
}需要這么多類注解是讓程序員看到類注解之后,就能直接了解當(dāng)前類的?途,比如:
@Controller:表示的是業(yè)務(wù)邏輯層 @Servie:表示的是服務(wù)層 @Repository:表示的是持久層 @Configuration:表示的是配置層
Bean
?法注解是放到某個(gè)?法上的要配合類注解使?,如以下代碼的實(shí)現(xiàn):
@Controller
public class Users {
@Bean
public User user1(){
User user = new User();
return user;
}
}
public class Test {
public static void main(String[] args) {
//獲取spring上下文
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//獲取指定的Bean對象名稱+類型進(jìn)行獲取
User user = (User) applicationContext.getBean("user1");
user.sayHi("zcx");
}
}user類
@Component
public class User {
public void sayHi(String name){
System.out.println(name+"你好");
}
}結(jié)果

重命名Bean
可通過設(shè)置 name 屬性給 Bean 對象進(jìn)?重命名操作
@Bean(name = {"u1", "us1"})
public User user1() {
User user = new User();
return user;
}或者
@Bean(name = {"u1", "us1"})
public User user1() {
User user = new User();
return user;
}獲取Bean對象
獲取Bean對象就是把對象取出來放入某個(gè)類中,也叫對象注入或者對象裝配。
對象注入有三種實(shí)現(xiàn)方法:
屬性注? 構(gòu)造?法注? Setter 注?
下?我們按照實(shí)際開發(fā)中的模式,將 Service 類注?到 Controller 類中
屬性注入
屬性注?是使? @Autowired 實(shí)現(xiàn)的,實(shí)現(xiàn)代碼如下:
@Service
public class UserService {
public User user1(){
User user = new User();
return user;
}
}
@Controller
public class UserController {
@Autowired
private UserService userService;
public User getUser(){
return userService.user1();
}
}
public class Test {
public static void main(String[] args) {
//獲取spring上下文
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//獲取指定的Bean對象名稱+類型進(jìn)行獲取
UserController userController = applicationContext.getBean(UserController.class);
userController.getUser().sayHi("zcx");
}
}
構(gòu)造方法注入
構(gòu)造?法注?是在類的構(gòu)造?法中實(shí)現(xiàn)注?,實(shí)現(xiàn)代碼如下:
@Controller
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
public User getUser(){
return userService.user1();
}
}其余代碼寫法跟屬性注入一樣
Setter注入
在設(shè)置 set ?法的時(shí)候需要加上 @Autowired 注解
@Controller
public class UserController {
private UserService userService;
@Autowired
public void SetUserController(UserService userService) {
this.userService = userService;
}
public User getUser(){
return userService.user1();
}
}@Resource(注入關(guān)鍵字)
@Controller
public class UserController {
@Resource
private UserService userService;
public User getUser(){
return userService.user1();
}
}使用@Resource 可以解決同?類型多個(gè) Bean 報(bào)錯(cuò)問題
可以如下設(shè)置方法名
@Resource(name = "user1")
@Autowired 和 @Resource 的區(qū)別
出身不同:@Autowired 來?于 Spring,? @Resource 來?于 JDK 的注解 使?時(shí)設(shè)置的參數(shù)不同:相?于 @Autowired 來說,@Resource ?持更多的參數(shù)設(shè)置,例如name 設(shè)置,根據(jù)名稱獲取 Bean @Autowired 可?于 Setter 注?、構(gòu)造函數(shù)注?和屬性注?,? @Resource 只能?于 Setter 注?和屬性注?,不能?于構(gòu)造函數(shù)注?
更多文章推薦:
2.2,000+ 道 Java面試題及答案整理(2024最新版)
3.《Java開發(fā)手冊(嵩山版)》最新發(fā)布!
到此這篇關(guān)于一文讀懂Spring中@Bean注解的核心作用的文章就介紹到這了,更多相關(guān)Spring 中 @Bean 注解用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC中的@RequestMapping注解解析
這篇文章主要介紹了SpringMVC中的@RequestMapping注解解析,SpringMVC使用@RequestMapping注解為控制器指定可以處理哪些?URL?請求,在控制器的類定義及方法定義處都可標(biāo)注@RequestMapping,需要的朋友可以參考下2023-12-12
Java的MyBatis框架中關(guān)鍵的XML字段映射的配置參數(shù)詳解
將XML文件的schema字段映射到數(shù)據(jù)庫的schema是我們操作數(shù)據(jù)庫的常用手段,這里我們就來整理一些Java的MyBatis框架中關(guān)鍵的XML字段映射的配置參數(shù)詳解,需要的朋友可以參考下2016-06-06
MyBatis中的collection兩種使用方法及效率比較
collection主要是應(yīng)對表關(guān)系是一對多的情況,本文主要介紹了MyBatis中的collection兩種使用方法及效率比較,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
SpringBoot靜態(tài)方法調(diào)用Spring容器bean的三種解決方案
在SpringBoot中靜態(tài)方法調(diào)用Spring容器bean時(shí)出現(xiàn)的null值問題,本文就來介紹一下SpringBoot靜態(tài)方法調(diào)用Spring容器bean的三種解決方案,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

