最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中存取Bean的相關(guān)注解舉例詳解

 更新時(shí)間:2023年10月09日 11:07:13   作者:2o1?舊人不必等  
這篇文章主要給大家介紹了關(guān)于Spring中存取Bean的相關(guān)注解,在沒有使用注解獲取對(duì)象之前,我們需要在配置文件中通過添加bean來將對(duì)象存儲(chǔ)到Spring容器中,這對(duì)于我們來說是比較麻煩的,需要的朋友可以參考下

一、五大類注解

在Spring中,想要將Bean存儲(chǔ)到Spring中,一共有兩種注解類型可以實(shí)現(xiàn):

一種是類注解,其包括@Controller,@Service,@Repository,@Component,@Configuration;

另一種則是方法注解,其僅有@Bean

1、五大類注解存儲(chǔ)Bean對(duì)象

1.1@Controller(控制器儲(chǔ)存)

使? @Controller 存儲(chǔ) bean 的代碼如下所示:

package com.java.demo;
import org.springframework.stereotype.Controller;
@Controller
public class User {
    public void sayHi(){
        System.out.println("hi User");
    }
}

我們?cè)僭趩?dòng)類中,簡(jiǎn)單讀取一下存入的對(duì)象

import com.java.demo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("srping-config.xml");
        User user = context.getBean("user", User.class);
        user.sayHi();
    }
}

運(yùn)行結(jié)果如下: 

1.2@Service(服務(wù)存儲(chǔ))

使? @Service 存儲(chǔ) Bean 的代碼如下所示:

@Service
public class UserService {
    public int add(){
        System.out.println("hi UserService add");
    }
}

 讀取 bean 的代碼:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService =
                context.getBean("userService", UserService.class);
        userService.add();
    }
}

 運(yùn)行結(jié)果如下:

1.3@Repository(倉庫存儲(chǔ))

使用@Repository存儲(chǔ)Bean的代碼如下:

@Repository
public class UserRepository {
    public void add(){
        System.out.println("hi UserRepository add");
    }
}

 讀取Bean的代碼:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserRepository userRepository =
                context.getBean("userRepository", UserRepository.class);
        userRepository.add();
    }
}

 運(yùn)行結(jié)果如下:

1.4@Component(組件存儲(chǔ))

使用@Component組件存儲(chǔ)Bean的代碼如下:

@Component
public class UserComponent {
    public void add(){
        System.out.println("Hi UserComponent add");
    }
}

 讀取Bean的代碼:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserComponent userComponent =
                context.getBean("userComponent", UserComponent.class);
        userComponent.add();
    }
}

運(yùn)行結(jié)果如下:

1.5@Configuration(配置存儲(chǔ))

使用@Configuration存儲(chǔ)Bean的代碼如下:

@Configurable
public class UserConfiguration {
    public void add(){
        System.out.println("Hi Configuration add");
    }
}

  讀取Bean的代碼:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserConfiguration userConfiguration =
                context.getBean("userConfiguration", UserConfiguration.class);
        userConfiguration.add();
    }
}

運(yùn)行結(jié)果如下:

2、五大類注解小結(jié)

2.1為什么要這么多類注解

讓代碼的可讀性更高,讓程序員能直觀的判斷當(dāng)前類的用途

Spring框架中有很多類注解,每個(gè)注解都有其特定的作用。這些注解使得開發(fā)人員能夠更加方便地配置和管理應(yīng)用程序。以下是其中一些注解的用途:

- @Component:用于將某個(gè)類標(biāo)記為組件,方便自動(dòng)掃描和注冊(cè)為Bean。

- @Controller:用于標(biāo)記控制器類,處理HTTP請(qǐng)求,并返回相應(yīng)結(jié)果。

- @Service:用于標(biāo)記服務(wù)類,對(duì)業(yè)務(wù)邏輯進(jìn)行封裝,通常被Controller層調(diào)用。

- @Repository:用于標(biāo)記倉庫類,封裝對(duì)數(shù)據(jù)的訪問和操作,通常被Service層調(diào)用。

- @Configuration:表明該類是Spring配置類,在其中定義Bean的創(chuàng)建和配置規(guī)則。

這些注解使得Spring框架變得更加靈活、可擴(kuò)展、易用。開發(fā)人員可以根據(jù)需要選擇合適的注解來達(dá)到自己的目的。

2.2 五大類注解之間的關(guān)系 

Spring框架中,常用注解可以歸為五大類,分別是:

@Component注解及其衍生注解:包括@Controller、@Service、@Repository等。這些注解用于在Spring容器中注冊(cè)Bean。
@Configuration注解及其衍生注解:包括@Bean注解。這些注解用于在Spring容器中聲明和配置Bean。
@Autowired注解及其衍生注解:包括@Qualifier、@Resource、@Inject等。這些注解用于進(jìn)行Bean的自動(dòng)注入。
@Value注解及其衍生注解:包括@PropertySource、@ConfigurationProperties等。這些注解用于進(jìn)行配置屬性的注入和讀取。
@Transactional及其衍生注解:包括@Transactional、@TransactionalEventListener等。這些注解用于聲明事務(wù)和監(jiān)聽事務(wù)事件。
這些注解之間的關(guān)系可以總結(jié)為:

@Component及其衍生注解是用于定義Bean的注解,可通過自動(dòng)掃描或手動(dòng)配置的方式注冊(cè)Bean。
@Configuration及其衍生注解用于聲明和配置Bean。
@Autowired及其衍生注解用于進(jìn)行Bean的自動(dòng)注入,可以與@Component和@Configuration注解一起使用。
@Value及其衍生注解用于進(jìn)行配置屬性的注入和讀取。
 @Transactional及其衍生注解用于聲明事務(wù)和監(jiān)聽事務(wù)事件,通常用于@Service和@Repository注解的類。

 總的來說,這些注解是相互關(guān)聯(lián)的,可以結(jié)合使用,達(dá)到更加靈活和高效的開發(fā)效果。 

二、方法注解

1.方法注解的存儲(chǔ)

1.1 @Bean注解的使用

我們先創(chuàng)建一個(gè)用戶類

public class User {
    public int Id;
    private String name;
    @Override
    public String toString() {
        return "User{" +
                "Id=" + Id +
                ", name='" + name + '\'' +
                '}';
    }
    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

與類注解不同,類注解是添加到某個(gè)類上的;而方法注解自然就是添加到某個(gè)方法上的

之后再創(chuàng)建一個(gè)方法類,我們要注意在定義方法Bean的時(shí)候也要定義五大類注解,因?yàn)锧Bean要配合類注解才能將對(duì)象正常的存儲(chǔ)到Spring容器中才能獲取到

@Component
public class Users {
    @Bean()
    public User getUser(){
        User user = new User();
        user.setId(66);
        user.setName("竹筒子");
        return user;
    }
}
public class test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        User user = (User) context.getBean("getUser");
        System.out.println(user.toString());
    }
}

1.2 @Bean方法的重命名 

可以通過設(shè)置 name 屬性給 Bean 對(duì)象進(jìn)?重命名操作,如下圖所示:

Bean命名規(guī)則,當(dāng)沒有設(shè)置name屬性時(shí),那么bean默認(rèn)的名稱就是方法名,當(dāng)設(shè)置了name屬性后,只能通過重命名的name屬性對(duì)應(yīng)的值獲取,也就是說重命名后,再使用方法名就獲取不到Bean對(duì)象了. 此外要注意Bean name是區(qū)分大小寫的

2.方法注解的獲取

在Spring中獲取Bean對(duì)象也叫做對(duì)象裝配或者對(duì)象注入

從Spring中獲取Bean對(duì)象的實(shí)現(xiàn)方法有以下三種:

屬性注入,Setter方法注入,以及構(gòu)造方法注入

2.1 屬性注入

屬性注?是使? @Autowired 實(shí)現(xiàn)的,將 Service 類注?到 Controller 類中。Service 類的實(shí)現(xiàn)代碼如下:

@Controller
public class UserController {
    @Autowired
    private UserService userService;
    public User getUser(){
        return userService.getUser();
    }
}
public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        UserController userController=
                context.getBean("userController", UserController.class);
        userController.Hi();
    }
}

屬性注入的優(yōu)缺點(diǎn):

屬性注入的優(yōu)點(diǎn)在于,足夠的簡(jiǎn)單以及簡(jiǎn)潔

缺點(diǎn)在于只能用于IOC容器,同時(shí)無法注入被final修飾的對(duì)象,而且較容易違背單一性原則

2.2 Setter注入

Setter注入的實(shí)現(xiàn)也需要依賴@Autowired進(jìn)行實(shí)現(xiàn),不過其主要針對(duì)setter方法進(jìn)行

@Controller
public class UserController {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    public User getUser(){
        return userService.getUser();
    }
}

Setter注入的優(yōu)缺點(diǎn):

Setter注入的優(yōu)點(diǎn)在于,其較不容易違背單一性原則

缺點(diǎn)在于,不如屬性注入來的簡(jiǎn)介,同時(shí)無法注入被final修飾的對(duì)象

2.3 構(gòu)造方法注入

與前面類似,構(gòu)造方法注入從名字上看,其實(shí)就是在構(gòu)造器上添加@Autowired注解

@Controller
public class StuController {
    private Stu stu;
    @Autowired
    public StuController(Stu stu) {
        this.stu = stu;
    }
    public void sayHi(){
        System.out.println(stu);
    }
}

由于構(gòu)造器注入是比較后面出的,其實(shí)它也有一定的智能性:當(dāng)我們只存在一個(gè)構(gòu)造器的時(shí)候,我們可以選擇不添加@Autowired,但是當(dāng)有多個(gè)構(gòu)造器的時(shí)候我們必須手動(dòng)添加@Autowired來指定構(gòu)造器來進(jìn)行注入 

構(gòu)造方法注入優(yōu)缺點(diǎn):

優(yōu)點(diǎn):構(gòu)造器是Spring推薦的注入方式,同時(shí)構(gòu)造器注入的通用性較強(qiáng),能夠注入被final修飾的對(duì)象

缺點(diǎn)在于不如屬性注入來的簡(jiǎn)介及方便

三、總結(jié) 

1.三種注?優(yōu)缺點(diǎn)分析 

  • 屬性注?的優(yōu)點(diǎn)是簡(jiǎn)潔,使??便;缺點(diǎn)是只能?于 IoC 容器,如果是? IoC 容器不可?,并且只有在使?的時(shí)候才會(huì)出現(xiàn) NPE(空指針異常)
  • Setter ?式是 Spring 前期版本推薦的注??式,但通?性不如構(gòu)造?法,所有 Spring 現(xiàn)版本已經(jīng)推薦使?構(gòu)造?法注?的?式來進(jìn)?類注?了
  • 構(gòu)造?法注?是 Spring 推薦的注??式,它的缺點(diǎn)是如果有多個(gè)注?會(huì)顯得?較臃腫,但出現(xiàn)這種情況你應(yīng)該考慮?下當(dāng)前類是否符合程序的單?職責(zé)的設(shè)計(jì)模式了,它的優(yōu)點(diǎn)是通?性,官方推薦,在使?之前?定能把保證注?的類不為空

2.Resource和@Autowired的區(qū)別

當(dāng)我們?cè)谶M(jìn)行類注入的時(shí)候,除了使用@Autowired的時(shí)候,我們也可以使用@Resource進(jìn)行注入

@Resource的用法與@Autowired相同

  •  @Autowired來自Spring,而@Resource來自JDK的注解
  • @Resource支持更多的參數(shù)設(shè)置,可以添加name設(shè)置來根據(jù)名稱獲取Bean
  • @Resource不能用于構(gòu)造函數(shù)注入

 總結(jié)

到此這篇關(guān)于Spring中存取Bean的相關(guān)注解舉例詳解的文章就介紹到這了,更多相關(guān)Spring存取Bean注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven依賴沖突加載順序與解決

    maven依賴沖突加載順序與解決

    這篇文章主要介紹了項(xiàng)目中同時(shí)引用了相同依賴的不同版本,也就是沖突,maven?是如何選擇的,了解了有助于解決項(xiàng)目中的依賴問題,需要的朋友可以參考下
    2024-01-01
  • 詳解Java中信號(hào)量Semaphore的使用

    詳解Java中信號(hào)量Semaphore的使用

    在Java中,正確地管理并發(fā)是一件既挑戰(zhàn)又有趣的事情,當(dāng)談到并發(fā)控制,就不得不說Java中的一個(gè)非常強(qiáng)大的工具,就是Semaphore,下面我們就來看看Java中信號(hào)量Semaphore的具體使用吧
    2024-01-01
  • 關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一文精通Spring Boot序列化與反序列化(告別數(shù)據(jù)混亂)

    一文精通Spring Boot序列化與反序列化(告別數(shù)據(jù)混亂)

    本篇文章主要介紹了序列化與反序列化的概念,以及在SpringBoot中的應(yīng)用,文章通過通俗易懂的語言和比喻,深入淺出地解釋了這兩個(gè)過程,并展示了SpringBoot如何通過SpringMVC和Jackson庫簡(jiǎn)化數(shù)據(jù)格式轉(zhuǎn)換,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問題

    解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further&

    這篇文章主要介紹了解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java?EasyExcel實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能

    Java?EasyExcel實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能

    這篇文章主要為大家詳細(xì)介紹了Java?EasyExcel如何實(shí)現(xiàn)合并相同內(nèi)容單元格與動(dòng)態(tài)標(biāo)題功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2023-12-12
  • Java中的深拷貝和淺拷貝介紹

    Java中的深拷貝和淺拷貝介紹

    對(duì)象拷貝(Object Copy)就是將一個(gè)對(duì)象的屬性拷貝到另一個(gè)有著相同類類型的對(duì)象中去。在程序中拷貝對(duì)象是很常見的,主要是為了在新的上下文環(huán)境中復(fù)用對(duì)象的部分或全部 數(shù)據(jù)。Java中有三種類型的對(duì)象拷貝:淺拷貝(Shallow Copy)、深拷貝(Deep Copy)、延遲拷貝(Lazy Copy)
    2014-03-03
  • Java redisTemplate阻塞式處理消息隊(duì)列

    Java redisTemplate阻塞式處理消息隊(duì)列

    用redis中的List可以實(shí)現(xiàn)隊(duì)列,這樣可以用來做消息處理和任務(wù)調(diào)度的隊(duì)列。因此,本文將主要為大家介紹如何利用redisTemplate處理消息隊(duì)列,感興趣的小伙伴可以了解一下
    2021-12-12
  • Java常用的八種排序算法及代碼實(shí)現(xiàn)+圖解

    Java常用的八種排序算法及代碼實(shí)現(xiàn)+圖解

    這篇文章主要介紹了Java常用的八種排序算法及代碼實(shí)現(xiàn),在Java的時(shí)候,對(duì)于排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時(shí)候能夠有扎實(shí)的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來詳細(xì)說說Java經(jīng)典的8種排序算法,需要的朋友可以參考一下
    2021-12-12
  • SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能

    SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能

    這篇文章主要介紹了SSH框架網(wǎng)上商城項(xiàng)目第12戰(zhàn)之添加和更新商品功能的實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評(píng)論

东阿县| 金平| 邳州市| 本溪市| 依安县| 温州市| 灵璧县| 神木县| 雅安市| 灵石县| 贵南县| 宣化县| 顺义区| 多伦县| 宝兴县| 江华| 浠水县| 肃宁县| 沾化县| 黄平县| 鄂托克旗| 浦东新区| 晴隆县| 香港 | 宁强县| 双桥区| 台北县| 淮北市| 台江县| 金乡县| 甘孜县| 澄迈县| 中江县| 盐山县| 鄢陵县| 台东市| 嘉黎县| 海丰县| 卢湾区| 天峨县| 建阳市|