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

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解)

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

目錄

1. 存儲 Bean 對象

1.1 配置掃描路徑

1.2 添加注解存儲 Bean 對象

1.2.1 @Controller(控制器存儲)

1.2.2?@Service(服務存儲)

1.2.3?@Repository(倉庫存儲)

1.2.4?@Component(組件存儲)

1.2.5?@Configuration(配置存儲)

1.3 使用多個類注解的原因

1.3.1 五大注解之間的關系

1.3.1 Bean 的命名規(guī)則

1.4 方法注解 @Bean

1.4.1 方法注解要配合類注解使用

1.4.2 重命名 Bean

1.4.3 給有參數的方法添加 Bean 注解?

1.4.4 Spring xml 配置的方式進行傳參

2. 根據日志定位問題

NoSuchBeanDefinitionException -- 沒有找到 Bean


3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

在 Spring 中想要更簡單的存儲和讀取對象的核心是使用注解。

1. 存儲 Bean 對象

之前我們存儲 Bean 時,需要在 spring-config 中添加?行 bean 注冊內容才行,如下圖所示:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

但是現(xiàn)在我們可以通過注解來代替上面的配置。

1.1 配置掃描路徑

想要將對象成功的存儲到 Spring 中,我們需要配置?下存儲對象的掃描包路徑,只有被配置的包下的所有類,添加了注解才能被正確的識別并保存到 Spring 中

在 spring-config.xml 添加如下配置:

<?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.bit.service"></content:component-scan>
</beans>

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

也就是說,即使添加了注解,如果不是在配置的掃描包下的類對象,也是不能被存儲到 Spring 中的。

1.2 添加注解存儲 Bean 對象

想要將對象存儲在 Spring 中,有兩種注解類型可以實現(xiàn):

1. 類注解:@Controller、@Service、@Repository、@Component、@Configuration。

2. 方法注解:@Bean。

1.2.1 @Controller(控制器存儲)

使用?@Controller 存儲對象:

@Controller
public class UseController {
    public void sayHi(){
        System.out.println("hi,Controller...");
    }
}

接下來取對象:

public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        UserController user = (UserController) context.getBean("userController");
        // 使用 Bean
        user.sayHi();
    }
}

可以發(fā)現(xiàn)在使用 getBean() 方法時,我們直接使用了注解下類名的小駝峰的形式,可以看到運行無誤:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

1.2.2?@Service(服務存儲)

使用?@Service 存儲對象:

@Service
public class UserService {
    public void sayHi(){
        System.out.println("Hi,Service...");
    }
}

?接下來取對象:

public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        UserService userService = (UserService)context.getBean("userService");
        // 使用 Bean
        userService.sayHi();
    }
}
1.2.3?@Repository(倉庫存儲)

使用?@Repository 存儲對象:

@Repository
public class UserRepository {
    public void sayHi(){
        System.out.println("Hi,Repository...");
    }
}

接下來取對象:

public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        UserRepository userRepository = (UserRepository)context.getBean("userRepository");
        // 使用 Bean
        userRepository.sayHi();
    }
}
1.2.4?@Component(組件存儲)

使用?@Component 存儲對象:

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

?接下來取對象:

public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        UserComponent userComponent = (UserComponent)context.getBean("userComponent");
        // 使用 Bean
        userComponent.sayHi();
    }
}
1.2.5?@Configuration(配置存儲)

使用?@Configuration 存儲對象:?

@Configuration
public class UserConfiguartion {
    public void sayHi(){
        System.out.println("Hi,Configuration...");
    }
}

?接下來取對象:

public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        UserConfiguartion userConfiguartion = (UserConfiguartion)context.getBean("userConfiguartion");
        // 使用 Bean
        userConfiguartion.sayHi();
    }
}
1.3 使用多個類注解的原因

通過不同的類注解更加明確當前類的用途:

  • @Controller:表示的是業(yè)務邏輯層,控制器,通常是指程序的入口。比如參數校驗、參數類型轉換、前置處理工作等;
  • @Servie:服務層,一般寫業(yè)務代碼、服務編排、調用 DB、調用第三方接口等;
  • @Repository:持久層,倉庫,通常是指 DB 操作相關的代碼(Dao、mapper);
  • @Component:其他的對象;
  • @Configuration:配置層。
1.3.1 五大注解之間的關系

?查看 @Controller / @Service / @Repository / @Configuration 等注解的源碼發(fā)現(xiàn):

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

?這些注解里面都有?個注解 @Component,說明它們本身就是屬于 @Component 的“子類”。

1.3.1 Bean 的命名規(guī)則

通過以上舉例我們猜測:注解對應的 Bean 的名稱是首字母小寫。那么,真的如此嗎?此時就需要我們去查看一下官方的文檔。按住 CTRL + N 鍵進行搜索:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

可以看到第四個是我們所需要的關于注解的,點進去后可以看到:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

因此,我們得出結論:

當類名前兩位均為大寫時,需要返回自身類名;否則,返回首字母小寫后的類名。

1.4 方法注解 @Bean
1.4.1 方法注解要配合類注解使用

類注解是添加到某個類上的,而方法注解是放到某個方法上的,如以下代碼的實現(xiàn):

public class Users {
    private String name;
    private Integer age;

    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(Integer age){
        this.age = age;
    }
@Configuration
public class BeanConfig {
    @Bean
    public Users user(){
        Users user = new Users();
        user.setName("小明");
        user.setAge(18);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}
public class App {
    public static void main(String[] args) {
        // 得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 獲取 Bean 對象
        Users users = (Users) context.getBean("user");
        // 使用 Bean
        System.out.println(users.getName());
    }
}

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

@Bean 無法直接單獨使用,必須搭配五大類注解使用。

Bean 對應生成的 Bean 名稱是方法名。

1.4.2 重命名 Bean
@Configuration
public class BeanConfig {
    @Bean("aaa")
    public Users user(){
        Users user = new Users();
        user.setName("小明");
        user.setAge(18);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}
@Configuration
public class BeanConfig {
    @Bean(name={"aaa","user"})
    public Users user(){
        Users user = new Users();
        user.setName("小明");
        user.setAge(18);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}
@Configuration
public class BeanConfig {
    @Bean({"aaa","user"})
    public Users user(){
        Users user = new Users();
        user.setName("小明");
        user.setAge(18);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}

以上三種方法均可實現(xiàn) Bean 的重命名,重命名之后則無法使用原來的方法名來獲取 Bean

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

?對五大類注解同樣可以使用以上重命名的方法。

1.4.3 給有參數的方法添加 Bean 注解?
@Configuration
public class BeanConfig {
    @Bean({"aaa","user"})
    public Users user(Integer age){
        Users user = new Users();
        user.setName("小明");
        user.setAge(age);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}

直接運行上述代碼會報錯,因為并沒有找到 age 這個對象:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

?此時修改代碼如下:

@Configuration
public class BeanConfig {
    @Bean
    public Integer age(){
        return 15;
    }
    @Bean({"aaa","user"})
    public Users user(Integer age){
        Users user = new Users();
        user.setName("小明");
        user.setAge(age);
        return user;
    }
    public Users user2(){
        Users user = new Users();
        user.setName("小藍");
        user.setAge(19);
        return user;
    }
}

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

?將對象交給 Spring 管理后,會自動匹配對應的類型,還可以通過其他方式去讀?。ū热缗渲梦募校?strong>當只有一個 @Bean 注解時,根據類型進行匹配;當有多個 @Bean 時,根據名稱進行匹配。

1.4.4 Spring xml 配置的方式進行傳參
public class BeanConfig {
    public Users user(String name){
        Users user = new Users();
        user.setName(name);
        user.setAge(12);
        return user;
    }
}
<bean id="user" class="springcore">
    <constructor-arg name="name" value="小明"></constructor-arg>
</bean>

當需要注入的是對象時,要寫引用:

public class UserController {
    private UserService userService;
    public UserController(UserService userService){
        this.userService = userService;
    }
    public void sayHi(){
        System.out.println("hi,Controller...");
    }
}
<bean id="user" class="springcore">
    <constructor-arg name="userService" ref="userService"></constructor-arg>
</bean>

2. 根據日志定位問題

NoSuchBeanDefinitionException -- 沒有找到 Bean

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userController' available

?沒有名為“userController”的bean可用。

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

可以看到此時是因為注解被注釋了,不再生效的原因。

出現(xiàn)以上日志時還有另一種可能原因,如下圖所示:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

也就是說當我們的掃描路徑與實際不符時,同樣會出現(xiàn)找不到 Bean 的情況。

除了以上兩種情況當我們通過注解獲取 Bean 時,類名不符合要求同樣會生成以上的日志,具體如下圖所示:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

還有一種情況是因為將注解重命名了,但是使用的依然時未重命名之前的注解,同樣會生成以上日志:

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.Integer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}?

沒有可用的“java.lang.Integer”類型的限定bean。

3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解),java ee,spring,java,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-610780.html

到了這里,關于3. Spring 更簡單的讀取和存儲對象(五大類注解 & 方法注解)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

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

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

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

    2023年04月19日
    瀏覽(26)
  • 【Spring】使用注解讀取和存儲Bean對象

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

    ?哈嘍,哈嘍,大家好~ 我是你們的老朋友: 保護小周? ?? 談起Java 圈子里的框架,最年長最耀眼的莫過于 Spring 框架啦,本期給大家?guī)淼氖牵? 將對象存儲到 Spring 中、Bean 對象的命名規(guī)則、從Spring 中獲取bean 對象、注入的、@Autowired 與?@Resource 的區(qū)別、解決@Bean 方

    2024年02月13日
    瀏覽(23)
  • 【Spring】(三)Spring 使用注解存儲和讀取 Bean對象

    【Spring】(三)Spring 使用注解存儲和讀取 Bean對象

    前面的文章詳細的介紹了 Spring 對象的創(chuàng)建,以及對 Bean 對象的存取操作,但是通過配置文件注冊 Bean 對象以及使用 ApplicationContext 或 BeanFactory 的方式獲取 Bean 對象的操作就顯得格外的復雜。因此,本文主要就是詳細介紹了一種更加簡單的方式來實現(xiàn)對 Bean 對象更加簡單的儲

    2024年02月14日
    瀏覽(19)
  • Spring 更簡單的讀取和存儲對象

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

    在 Spring 中要想更簡單的存儲和讀取對象 , 核心是 使用注解 , 所以我們需要通過 Spring 中相關注解 , 來存儲和讀取 Bean 對象. 之前我們存儲 Bean 時 , 需要在 spring-config.xml 中添加一行注釋才行: 而現(xiàn)在我們只需一個注解就可以替代之前要寫一行配置 , 不過在存儲對象之前 , 我們先

    2024年02月02日
    瀏覽(24)
  • 5-Spring更簡單的讀取和存儲對象

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

    目錄 1.存儲Bean對象 1.1.前置工作:在配置文件中設置bean掃描的根路徑(重要) 1.2.添加注解存儲Bean對象到Spring中 1.2.1.類注解(添加到某個類上,將當前的類存儲到Spring中):@Controller,@Service,@Repository,@Component,@Configuration 關于類注解的bean的命名規(guī)則: PS:為什么要這么多類

    2023年04月25日
    瀏覽(20)
  • Spring系列3 -- 更簡單的讀取和存儲對象

    Spring系列3 -- 更簡單的讀取和存儲對象

    ???????? 上一篇章總結了,Spring的創(chuàng)建與使用,通過創(chuàng)建Maven項目配置Spring的環(huán)境依賴,創(chuàng)建Spring框架的項目,然后通過在Resource目錄下創(chuàng)建Spring-config.xml配置文件,添加bean/bean標簽將我們需要的bean對象注入到容器中,然后通過ApplicationContext獲取Spring上下文,使用getBean()方法獲取be

    2024年02月13日
    瀏覽(25)
  • Spring更簡單的存儲和讀取Bean對象

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

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

    2024年02月03日
    瀏覽(23)
  • 【JavaEE進階】Spring 更簡單的讀取和存儲對象

    【JavaEE進階】Spring 更簡單的讀取和存儲對象

    配置掃描路徑是使用注解之前的前置工作,是非常重要的,是必須的操作項.只有被配置的包下的所有類,添加了注解才能被正確的識別并保存到 Spring 中. 首先創(chuàng)建一個Spring項目.創(chuàng)建好后,第一步就是配置掃描路徑:在 resources 目錄中創(chuàng)建一個 spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    瀏覽(22)
  • 【Spring框架全系列】Spring更簡單的讀取和存儲對象

    【Spring框架全系列】Spring更簡單的讀取和存儲對象

    ????哈嘍,大家好,我是小浪。上篇博客我們介紹了如何創(chuàng)建一個spring項目,并且如何的存、取對象,介紹了相關方法,那么本篇博客將接著上篇博客的內容介紹如何更加簡單的讀取和存儲對象。 ??在 Spring 中想要更簡單的存儲和讀取對象的核?是使?注解,也就是我們接

    2024年02月05日
    瀏覽(20)
  • JavaEE 突擊 5 - Spring 更簡單的讀取和存儲對象(2)

    JavaEE 突擊 5 - Spring 更簡單的讀取和存儲對象(2)

    大家新年快樂 , 祝大家新的一年如圖 這個專欄給大家介紹一下 Java 家族的核心產品 - SSM 框架 JavaEE 進階專欄 Java 語言能走到現(xiàn)在 , 仍然屹立不衰的原因 , 有一部分就是因為 SSM 框架的存在 接下來 , 博主會帶大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相關知識點 并且?guī)ьI

    2024年02月19日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包