国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Spring的五大類注解讀取和存儲Bean

這篇具有很好參考價值的文章主要介紹了使用Spring的五大類注解讀取和存儲Bean。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.存儲Bean對象的注解

1.1 五大類注解

1.2 方法注解

1.3添加注解的依賴

2.注解的使用

2.1??controller注解

2. 2Service注解

?2.3.Resopsitory注解

2.4Component注解

2.5Configuration注解

2.6 注解之間的關(guān)系

3.方法注解

3.1 方法注解要配合類注解來使用。

3.2 重命名Bean

4.獲取Bean對象(對象裝配)

4.1屬性注?(常用)

4.2構(gòu)造?法注?(推薦使用)

4.3Setter 注?

4.4三種注?優(yōu)缺點分析

4.5?@Resource:另?種注?關(guān)鍵字

4.6?@Autowired 和 @Resource 區(qū)別

4.7?解決同?類型多個 Bean 的報錯:


1.存儲Bean對象的注解

兩種:五大類注解和方法注解

1.1 五大類注解

@Controller :(控制器:驗證用戶(廣義用戶包括前端)請求的數(shù)據(jù)正確性)(類似于安保系統(tǒng))

@Service :(服務(wù):服務(wù)層,用來編排和調(diào)度具體執(zhí)行方法的,(客服中心))

@Repository: (持久層:和數(shù)據(jù)庫的交互;執(zhí)行者) ==DAO層(Date Accsess Object)數(shù)據(jù)訪問層

@Component :(組件:(工具類))

@Configuration :(配置項:項目當(dāng)中的一些配置,存儲項目當(dāng)中的一些注解)

1.2 方法注解

@Bean

1.3添加注解的依賴

Spring設(shè)計理念:約定大于配置,小駝峰的形式

?在resources文件夾下創(chuàng)建spring.xml,設(shè)置掃描包的路徑

<?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">
<!--    掃描包的地址-->
    <content:component-scan base-package="com.java.demo"></content:component-scan>
</beans>

使用Spring的五大類注解讀取和存儲Bean

2.注解的使用

1.添加spring依賴(pom.xml)

使用Spring的五大類注解讀取和存儲Bean

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.13</version>
        </dependency>
    </dependencies>

2.添加啟動類

?使用Spring的五大類注解讀取和存儲Bean

2.1??controller注解

package com.java.demo.controller;

import org.springframework.stereotype.Controller;

@Controller //將當(dāng)前類存儲到spring中
public class StudentController {
    public void sayHi(){
        System.out.println("do studentController sayHi()");
    }
}
import com.java.demo.controller.StudentController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
    public static void main(String[] args) {
        //1.得到Spring對象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        //2.得到bean對象
        StudentController studentController =
                context.getBean("studentController",StudentController.class);
        //3.使用bean
        studentController.sayHi();
    }
}

使用Spring的五大類注解讀取和存儲Bean

注意:?

默認(rèn)情況:原類名首字母小寫就能讀取到Bean對象;

特例:原類名如果首字母和第二字母都是大寫的情況下,那么bean名稱就是原類名;

2. 2Service注解

package com.java.demo.service;
import org.springframework.stereotype.Service;
@Service
public class StudentService {
    public void sayHi(){
        System.out.println("StudentService sayHi()");
    }
}
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
StudentService studentService =
                context.getBean("studentService",StudentService.class);
studentService.sayHi();

使用Spring的五大類注解讀取和存儲Bean

?2.3.Resopsitory注解

import org.springframework.stereotype.Repository;
@Repository
public class StudentRepository {
    public void sayhi(){
        System.out.println("StudentRepository sayhi");
    }
}
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

StudentRepository studentRepository =
                context.getBean("studentRepository",StudentRepository.class);
studentRepository.sayhi();

使用Spring的五大類注解讀取和存儲Bean

2.4Component注解

import org.springframework.stereotype.Component;
@Component
public class StudentComponent {
    public void sayhi(){
        System.out.println("StudentComponent sayhi");
    }
}
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
StudentComponent studentComponent =
                context.getBean("studentComponent",StudentComponent.class);
studentComponent.sayhi();

使用Spring的五大類注解讀取和存儲Bean

2.5Configuration注解

import org.springframework.context.annotation.Configuration;
@Configuration
public class StudentConfiguration {
    public void sayhi(){
        System.out.println("StudentConfiguration sayhi");
    }
}

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
StudentConfiguration studentConfiguration =
                context.getBean("studentConfiguration",StudentConfiguration.class);
studentConfiguration.sayhi();

使用Spring的五大類注解讀取和存儲Bean

2.6 注解之間的關(guān)系

?@Controller / @Service / @Repository / @Configuration 等注解的源碼,他們屬于@Component 的“?類”。

3.方法注解

類注解是添加到某個類上的,??法注解是放到某個?法上的。

3.1 方法注解要配合類注解來使用。

在 Spring 框架的設(shè)計中,?法注解 @Bean 要配合類注解才能將對象正常的存儲到 Spring 容器中,如下代碼所示:
?

@Component
public class Users {
@Bean
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}
}

3.2 重命名Bean

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

@Component
public class Users {
@Bean(name = {"u1"})
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}
}

?name 其實是?個數(shù)組,?個 bean 可以有多個名字:

@Bean(name = {"u1", "us1"})
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}

使用Spring的五大類注解讀取和存儲Bean

問題:當(dāng)@Bean使用了重命名之后,那么默認(rèn)的方法名是否還能獲取對象?
答案:不能,當(dāng)給@Bean對象重命名之后,默認(rèn)的使用方法名獲取對象的方式就不能使用了。

4.獲取Bean對象(對象裝配)

獲取對象裝配的方法:

1. 屬性注?
2. 構(gòu)造?法注?
3. Setter 注?

4.1屬性注?(常用)

屬性注?是使? @Autowired 實現(xiàn)的,將 Service 類注?到 Controller 類中。

優(yōu)點:簡單

缺點:

1.沒辦法實現(xiàn)final修飾的變量注入

2.兼容性不好:只適用于IoC容器

3.風(fēng)險點:因為寫法簡單,所以違背單一設(shè)計原則的概論更大。

4.2構(gòu)造?法注?(推薦使用)

構(gòu)造方法注入(Spring官方推薦的注入方式),可以不加@Autowired。

特點:如果當(dāng)前類中只有一個構(gòu)造方法的話,那么@Autowired注解可以省略;
優(yōu)點:
1.可以注入一個不可變的對象(使用了final修飾的對象);
2.注入的對象不會被修改(構(gòu)造方法只能執(zhí)行一次);
3.構(gòu)造方法注入可以保證注入對象完全被初始化;
4.構(gòu)造方法的兼容性(通用性)更好;

4.3Setter 注?


Setter 注?和屬性的 Setter ?法實現(xiàn)類似,只不過在設(shè)置 set ?法的時候需要加上 @Autowired 注

優(yōu)點:Setter注入非常符合單一設(shè)計原則(每個方法只傳遞一個對象)。
缺點:
1.沒辦法實現(xiàn)final修飾的變量注入
2.使用setter注入的對象,對象可能會被修改

示例代碼:

package com.java.demo.controller;

import com.java.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

@Controller
public class UserController {
    //1.屬性注入
    @Autowired  //注入對象
      @Resource
      private UserService userService;

    //2.Setter注入
      private UserService userService;
     @Autowired
     @Resource
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    //3.構(gòu)造方法注入
    private final UserService userService;
    @Autowired
    //@Resource //不能用在構(gòu)造方法上
    public UserController(UserService userService) {
        this.userService = userService;
    }

    public void sayHi(){
        System.out.println("com.java.demo -> do UserController sayHi()");

        userService.sayHi();
        userService.age = 20;
        userService.sayHi();
    }
}

4.4三種注?優(yōu)缺點分析

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

4.5?@Resource:另?種注?關(guān)鍵字

@Autowired 和 @Resource 的區(qū)別
1.出身不同:@Autowired 來?于 Spring,? @Resource 來?于 JDK 的注解;
2.使?時設(shè)置的參數(shù)不同:相?于 @Autowired 來說,@Resource ?持更多的參數(shù)設(shè)置,例如
name 設(shè)置,根據(jù)名稱獲取 Bean。
3.@Autowired 可?于 Setter 注?、構(gòu)造函數(shù)注?和屬性注?,? @Resource 只能?于 Setter 注
?和屬性注?,不能?于構(gòu)造函數(shù)注?。

解決同?類型多個 Bean 的報錯:
a. 使? @Resource(name="")
b. 使? @Qualifier("")

4.6?@Autowired 和 @Resource 區(qū)別

1.出身不同:@Autowired 來?于 Spring,? @Resource 來?于 JDK 的注解;
2.使?時設(shè)置的參數(shù)不同:相?于 @Autowired 來說,@Resource ?持更多的參數(shù)設(shè)置,例如
name 設(shè)置,根據(jù)名稱獲取 Bean。
3.@Autowired 可?于 Setter 注?、構(gòu)造函數(shù)注?和屬性注?,? @Resource 只能?于 Setter 注?和屬性注?,不能?于構(gòu)造函數(shù)注?
4.拓展區(qū)別:
在Spring(容器)中找Bean有兩種方式:
1.根據(jù)類型查找
2.根據(jù)名稱查找
@Autowired先根據(jù)類型查找(byType),之后再根據(jù)名稱查找(byname)
?@Resource先根據(jù)名稱查找(byname),之后再根據(jù)類型查找(byType)

4.7?解決同?類型多個 Bean 的報錯:

a. 使? @Resource(name="")重命名

b. 使? @Autowired和@Qualifier("")進(jìn)行重命名文章來源地址http://www.zghlxwxcb.cn/news/detail-429033.html

package com.java.demo.controller;

import com.java.demo.entity.User;
import com.java.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

@Controller
public class UserController2 {
    //@Resource(name = "user1")
    //1.屬性注入方式
    @Autowired
    @Qualifier(value = "user1")
    private User user;

    public void sayHi(){
        System.out.println("com.java.demo -> do UserController sayHi()");
        System.out.println(user.getUsername());
    }
}

到了這里,關(guān)于使用Spring的五大類注解讀取和存儲Bean的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Spring】更簡單的讀取和存儲對象,五大類注解

    【Spring】更簡單的讀取和存儲對象,五大類注解

    經(jīng)過前面的學(xué)習(xí),我們已經(jīng)可以實現(xiàn)基本的 Spring 讀取和存儲對象的操作了,但在操作的過程中我們發(fā)現(xiàn)讀取和存儲對象并沒有想象中的那么 “簡單”,所以接下來我們要學(xué)習(xí)更加簡單的操作 Bean 對象的方法 在 Spring 中想要 更簡單的存儲和讀取對象的核心是使用注解 ,也就

    2024年02月15日
    瀏覽(20)
  • Spring使用注解存儲Bean對象

    Spring使用注解存儲Bean對象

    在前一篇博客中( Spring項目創(chuàng)建與Bean的存儲與讀取(DL))介紹的是通過配置文件注冊對象從而存儲到 Spring 中,這種方式其實還是挺繁瑣的。 實際上,在使用學(xué)習(xí)使用 Spring過程中,當(dāng)我們要實現(xiàn)一個功能的時候,先應(yīng)該考慮的是有沒有相應(yīng)的注解是實現(xiàn)對應(yīng)功能的,Spring 中

    2024年02月16日
    瀏覽(22)
  • Spring使用注解存儲和讀取對象

    Spring使用注解存儲和讀取對象

    之前我們存儲Bean時,需要在spring-config.xml中添加bean注冊才行,這樣的方式并不簡單。我們要想 更簡單的存儲和讀取對象的核心是使用注解 1.使用類注解(五大類注解): @Controller:控制器,驗證用戶請求的數(shù)據(jù)正確性(安保系統(tǒng)) @Service:服務(wù)層,編排和調(diào)度具體執(zhí)行方法的(客服

    2023年04月19日
    瀏覽(26)
  • Spring 更簡單的讀取和存儲對象、使用注解存取對象

    Spring 更簡單的讀取和存儲對象、使用注解存取對象

    我們知道物件都會隨著時代的發(fā)展,越變越簡單的。Spring 框架也不意外;我們在之前存儲Bean對象是在配置文件中添加 bean/bean 來存入Bean對象到Spring當(dāng)中的,使用那個類對象就要存入那個,一個兩個類對象還好,如果需要的對象多了,就會非常麻煩?,F(xiàn)在,隨著 Spring 發(fā)展不用

    2024年02月11日
    瀏覽(23)
  • Spring中Bean對象的存儲與讀取

    Spring中Bean對象的存儲與讀取

    在項目的 pom.xml 中添加 Spring 支持 如何選定版本環(huán)境:打開官網(wǎng),點擊github圖標(biāo) jdk8最后一個Spring版本是5.3.x,Spring6.0.x最低需要jdk17 版本沖突問題Maven自己處理 version : 可以選擇帶有 RELEASE結(jié)尾或者純數(shù)字結(jié)尾,這樣的版本更穩(wěn)定 項目下創(chuàng)建一個main方法的啟動類 存儲 Bean 之前

    2024年01月24日
    瀏覽(21)
  • Spring更簡單的存儲和讀取Bean對象

    Spring更簡單的存儲和讀取Bean對象

    目錄 1.第一個Spring項目 2.存儲Bean對象 2.1 準(zhǔn)備工作 2.2?五大類注解 2.3?方法注解@Bean 2.4 Bean對象的默認(rèn)命名規(guī)則 3. 讀取Bean對象 3.1 屬性注入 3.2 setter注入 3.3 構(gòu)造方法注入 3.4 注入異常問題 3.5 注入方式優(yōu)缺點 3.6 @Autowired和@Resource的區(qū)別 在學(xué)習(xí)更簡單的方式來讀取和存儲Bean對象

    2024年02月03日
    瀏覽(23)
  • Spring(二):更簡單的存儲與讀取 Bean

    Spring(二):更簡單的存儲與讀取 Bean

    通過上一章的Spring,我們基本實現(xiàn)了Spring 的讀取與存儲,但是在操作過程中,讀取與存儲并沒有那么得“簡單” 一套流程還是很復(fù)雜,所以,本章來介紹更加簡單得讀取與存儲。 在 Spring 中想要更簡單的存儲和讀取對象的核?是使?注解,也就是我們接下來要學(xué)習(xí) Spring 中的

    2024年02月15日
    瀏覽(17)
  • 從 Spring 的創(chuàng)建到 Bean 對象的存儲、讀取

    從 Spring 的創(chuàng)建到 Bean 對象的存儲、讀取

    目錄 創(chuàng)建 Spring 項目: 1.創(chuàng)建一個 Maven 項目: ?2.添加 Spring 框架支持: 3.配置資源文件: 4.添加啟動類: Bean 對象的使用: 1.存儲 Bean 對象: 1.1 創(chuàng)建 Bean: 1.2 存儲 Bean 到容器內(nèi): 2.獲取 Bean 對象: 2.1 創(chuàng)建 Spring 上下文: 2.2 獲取指定 Bean 對象: ApplicationContext 和 BeanFactor

    2024年02月06日
    瀏覽(17)
  • Spring項目創(chuàng)建與Bean的存儲與讀取(DL)

    Spring項目創(chuàng)建與Bean的存儲與讀取(DL)

    第一步,創(chuàng)建 Maven 項目 ,Spring 也是基于 Maven 的。 由于國外源不穩(wěn)定,可能讓下面第二步引入 Spring 依賴會失敗,所以這里先介紹如何一下配置國內(nèi)鏡像源。 現(xiàn)成的 settings.xml 文件鏈接:gitee 如果你已經(jīng)有了 settings.xml 文件,但沒有配置 mirror ,配置內(nèi)容如下: 如果你是在引

    2024年02月17日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包