欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Spring更簡單的存儲和讀取Bean-創(chuàng)新互聯(lián)

在這里插入圖片描述

站在用戶的角度思考問題,與客戶深入溝通,找到于都網(wǎng)站設(shè)計與于都網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋于都地區(qū)。

請?zhí)砑訄D片描述

??前言??

在上一篇文章【Spring的創(chuàng)建與使用】中,我們已經(jīng)了解了Spring中bean對象的基本的創(chuàng)建和使用方法,這篇文章通過注解的方法,使得存儲和讀取對象更加簡單。

🍉博客主頁: 🍁【如風(fēng)暖陽】🍁
🍉精品Java專欄【JavaSE】、【備戰(zhàn)藍(lán)橋】、【JavaEE初階】、【MySQL】、【數(shù)據(jù)結(jié)構(gòu)】
🍉歡迎點贊 👍 收藏 ?留言評論 📝私信必回喲😁

🍉本文由 【如風(fēng)暖陽】 原創(chuàng),首發(fā)于 🙉

🍉博主將持續(xù)更新學(xué)習(xí)記錄收獲,友友們有任何問題可以在評論區(qū)留言

🍉博客中涉及源碼及博主日常練習(xí)代碼均已上傳碼云(gitee)、GitHub


請?zhí)砑訄D片描述

📍內(nèi)容導(dǎo)讀📍
  • 🍅1.存儲Bean
    • 1.1 前置工作
    • 1.2 使用5大類注解實現(xiàn)存儲
      • 1.2.1 @Controller(控制器存儲)
      • 1.2.2 @Service(服務(wù)存儲)
      • 1.2.3 @Repository(倉庫存儲)
      • 1.2.4 @Component(組件存儲)
      • 1.2.5 @Configuration(配置存儲)
    • 1.3 為什么需要這么多的注解?
    • 1.4 五大類注解之間的關(guān)系
    • 1.5 Spring使用五大類注解生成beanName
    • 1.6 通過@Bean方法注解實現(xiàn)存儲
      • 1.6.1 方法注解要搭配類注解使用
      • 1.6.2 重命名Bean
  • 🍅2.獲取Bean
    • 2.1 屬性注入
    • 2.2 構(gòu)造方法注入
    • 2.3 Setter注入
    • 2.4 三種注入方式的區(qū)別
    • 2.5 另一種注入注解`@Resourse`
    • 2.6 同一個類型多個@Bean報錯
  • 🍅3.總結(jié)

請?zhí)砑訄D片描述

🍅1.存儲Bean

簡單的將Bean存儲到容器,有以下幾種方法:

a)使用5大類注解實現(xiàn)
b)通過@Bean方法注解

下標(biāo)我們一起來看具體的實現(xiàn)方式。

1.1 前置工作

在使用更簡單的方法存儲和讀取bean對象之前,先完成前置工作——在Spring配置文件中設(shè)置bean的掃描根路徑:

在這里插入圖片描述

1.2 使用5大類注解實現(xiàn)存儲 1.2.1 @Controller(控制器存儲)

使? @Controller 存儲 bean 的代碼如下所示:

@Controller
public class UserController {public void sayHi() {System.out.println("你好,Contorller");
    }
}

我們先使?之前讀取對象的?式來讀取上?的 UserController 對象,如下代碼所示:

public class App {public static void main(String[] args) {//1.得到Spring上下文
        ApplicationContext context=
                new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到bean
        UserController userController=context.getBean("userController",UserController.class);
        //3.使用bean
        userController.sayHi();
    }
}

此處我們的beanName依舊是類名的小駝峰命名法,在后邊我們會具體講述Spring使用五大類注解生成beanName的問題。

1.2.2 @Service(服務(wù)存儲)

使? @Service 存儲 bean 的代碼如下所示:

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

讀取bean的代碼:

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

使? @Repository 存儲 bean 的代碼如下所示:

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

讀取 bean 的代碼:

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

使? @Component 存儲 bean 的代碼如下所示:

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

讀取 bean 的代碼:

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

使? @Configuration 存儲 bean 的代碼如下所示:

@Configuration
public class UserConfiguration {public void sayHi() {System.out.println("你好,Configuration");
    }
}

讀取 bean 的代碼:

public class App {public static void main(String[] args) {//1.得到Spring上下文
        ApplicationContext context=
                new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到bean
        UserConfiguration userConfiguration=context.getBean("userConfiguration",UserConfiguration.class);
        //3.使用bean
        userConfiguration.sayHi();
    }
}
1.3 為什么需要這么多的注解?

既然上述的五大類注解都能夠完成將Bean對象存儲到Spring中的功能,那為什么需要這么多的注解呢?

這是因為不同的注解有不同的用途,在程序猿看到類注解后,就能直接了解當(dāng)前類的用途,增加了代碼的可讀性。

程序的工程分層,調(diào)用流程如下:
在這里插入圖片描述

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

查看 @Controller / @Service / @Repository / @Configuration 等注解的源碼發(fā)現(xiàn):
在這里插入圖片描述
這些注解里都有一個注解@Component,說明它們本身就是屬于@Component的“子類”。

1.5 Spring使用五大類注解生成beanName

在1.2所有的獲取bean對象的方法中,使用到的beanName都是小駝峰命名,但如果出現(xiàn)以下bean,還能通過小駝峰獲取到嗎?

@Controller
public class APIController {public void sayHi() {System.out.println("你好,APIController");
    }
}

在這里插入圖片描述
在我們?nèi)ミ€以小駝峰命名法去獲取bean對象時,發(fā)現(xiàn)報錯,說明并不是所有的beanName都是以小駝峰命名法來命名的。

我們來查看beanName的命名規(guī)則源碼:
(關(guān)于注解beanName的生成器)
在這里插入圖片描述
我們來看bean對象的命名規(guī)則的方法:
在這里插入圖片描述
它使?的是 JDK Introspector 中的 decapitalize ?法,源碼如下:

public static String decapitalize(String name) { if (name == null || name.length() == 0) { 	return name;
	 }
	 // 如果第?個字?和第?個字?都為?寫的情況,是把 bean 的?字?也?寫存儲了
	 if (name.length() >1 && Character.isUpperCase(name.charAt(1)) &&
		 Character.isUpperCase(name.charAt(0))){ 	return name;
	 }
	 // 否則就將?字??寫
	 char chars[] = name.toCharArray();
	 chars[0] = Character.toLowerCase(chars[0]);
	 return new String(chars);
}

如果第?個字母和第?個字母都為?寫的情況,是把 bean 的?字母也?寫存儲了,否則就將?字母?寫

所以對于上?報錯的代碼,我們只要改為以下代碼就可以正常運?了:
在這里插入圖片描述

1.6 通過@Bean方法注解實現(xiàn)存儲

類注解是添加到某個類上的,而方法注解是放到某個方法上的,但僅依靠方法注解是仍然獲取不到bean的,還需要搭配類注解:

1.6.1 方法注解要搭配類注解使用

先完成類代碼:

public class User {private 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) {this.id = id;
    }

    public String getName() {return name;
    }

    public void setName(String name) {this.name = name;
    }
}
@Component
public class UserBeans {@Bean
    public User getUser() {User user=new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }
}

使用User類:
在這里插入圖片描述
我們發(fā)現(xiàn)這樣也可以獲得User對象,但是beanName很別扭(也可以只通過bean type來獲取該類,但如果出現(xiàn)多次存儲的情況就會報錯),因為是方法名,而不是類名的小駝峰,所以我們可以通過設(shè)置name屬性給Bean對象,進行重命名操作,下邊看具體演示:

1.6.2 重命名Bean

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

@Component
public class UserBeans {@Bean(name="u1")
    public User getUser() {User user=new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }
}

此時我們使用u1就可以獲取到User對象了,如下代碼所示:
在這里插入圖片描述

🍅2.獲取Bean

獲取bean對象也叫做對象裝配,是把對象取出來放到某個類中,有時候也叫對象注入。

對象裝配(對象注入)的實現(xiàn)方法有以下三種:

  • 屬性注入
  • 構(gòu)造方法注入
  • Setter注入

下邊我們按照實際開發(fā)中的模式,將Service類注入到Controller類中。

2.1 屬性注入

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

Service類的實現(xiàn)代碼如下:

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

Controller類的實現(xiàn)代碼如下:

@Controller
public class UserController2 {//屬性注入
    @Autowired
    private UserService userService;

    public void sayHi() {userService.sayHi();
    }
}

獲取Controller中的sayHi?法:

在這里插入圖片描述

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

構(gòu)造方法注入是在類的構(gòu)造方法上,使用@Autowired實現(xiàn)注入,如下代碼所示:

@Controller
public class UserController3 {private UserService userService;

    //構(gòu)造方法注入
    @Autowired
    public UserController3(UserService userService) {this.userService = userService;
    }
    
    public void sayHi() {userService.sayHi();
    }
}

注意:
如果只有一個構(gòu)造方法,那么@Autowired注釋可以省略,但如果類中有多個構(gòu)造方法,就必須加上注解來明確指定到底使用哪個構(gòu)造方法,否則會報錯。

2.3 Setter注入

Setter注入和屬性的Setter方法實現(xiàn)類似,只不過在設(shè)置set方法的時候需要加上@Autowired注解,如下代碼所示:

@Controller
public class UserController4 {private UserService userService;
    
    //Setter注入
    @Autowired
    public void setUserService(UserService userService) {this.userService=userService;
    }
    
    public void sayHi() {userService.sayHi();
    }
}
2.4 三種注入方式的區(qū)別
  • 屬性注入:寫法簡單,但是通用性不好,它只能運行在IoC容器下,如果是非IoC容器就會出現(xiàn)問題。
  • Setter注入:該注入方式是早期Spring版本推薦的方式,但Setter注入的通用性沒有構(gòu)造方法注入的通用性好。
  • 構(gòu)造方法注入:通用性更好,它能確保在使用注入對象之前,此注入對象一定初始化過了。當(dāng)構(gòu)造方法參數(shù)較多時,開發(fā)者就要檢查自己所寫的代碼是否符合單一設(shè)計原則的規(guī)范了,此注入方式也是Spring后期版本中推薦的注入方式。
2.5 另一種注入注解@Resourse

該注入注解與@Autowired功能幾乎相同,但也有差別,下邊看兩者的具體差別:

1、出身不同:@Resourse來自于JDK,而@Autowired是Spring框架提供的。
2、用法不同:@Autowired支持屬性注入、構(gòu)造方法注入和Setter注入,而@Resourse比前者少一個,它不支持構(gòu)造方法注入。
3、支持的參數(shù)不同:@Resourse支持更多的參數(shù)設(shè)置,比如name、type設(shè)置,而@Autowired只支持required參數(shù)設(shè)置。

2.6 同一個類型多個@Bean報錯

當(dāng)出現(xiàn)以下多個Bean,返回同一對象類型時程序會報錯,如下代碼所示:

@Component
public class UserBeans {@Bean(name="u1")
    public User getUser1() {User user=new User();
        user.setId(1);
        user.setName("張三");
        return user;
    }
    @Bean(name="u2")
    public User getUser2() {User user=new User();
        user.setId(2);
        user.setName("李四");
        return user;
    }
}

在另一個類中獲取User對象,如下代碼所示:

@Controller
public class UserController {@Resource
    private User user;

    public void sayHi() {System.out.println("user->"+user);
    }
}

運行結(jié)果如下:
在這里插入圖片描述
報錯的原因是非唯一的Bean對象。

同一個類型多個Bean的報錯處理有以下三種方式:

1、精確地描述bean的名稱(將注入的名稱寫對)
在這里插入圖片描述
2、使用@Resourse設(shè)置name的方式來重命名注入對象
在這里插入圖片描述
3、使用@Autowired+@Qualifier來篩選bean對象
在這里插入圖片描述

🍅3.總結(jié)

1、將對象存儲到Spring中:

  • 使用類注解:@Controller、@Service、@Repository、@Configuration@Component【了解它們之間的關(guān)系與區(qū)別】
  • 使用方法注解:@Bean【注意搭配類注解一起使用】

2、Bean的命名規(guī)則:
首字母和第二個字母都是大寫,那么直接使用原Bean名來獲取Bean,否則就讓首字母小寫(小駝峰)來獲取Bean。

3、從Spring中獲取對象:

  • 屬性注入
  • Setter注入
  • 構(gòu)造函數(shù)注入(官方推薦)

4、注入的關(guān)鍵字:

  • @Autowired
  • @Resourse

5、@Autowired@Resourse的區(qū)別:

  • 出身不同
  • @Resourse不支持構(gòu)造方法注入
  • @Resourse支持更多的參數(shù)

6、解決同一類型多個Bean的報錯:

  • 使用更精確的bean名稱
  • 使用@Resourse(name="")
  • 使用@Autowired @Qulifier("value =")

??最后的話??
總結(jié)不易,希望uu們不要吝嗇你們的👍喲(^U^)ノ~YO!!如有問題,歡迎評論區(qū)批評指正😁

請?zhí)砑訄D片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前標(biāo)題:Spring更簡單的存儲和讀取Bean-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://aaarwkj.com/article44/dppohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)App設(shè)計、域名注冊、面包屑導(dǎo)航電子商務(wù)、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
美国一级二级三级黄片| 精品一区二区视频在线观看网站 | 丰满少妇在线观看网站| 午夜福利中文在线观看| 亚洲国产中日韩精品综合| 日韩在线不卡免费视频一区| 欧美二区三区精品在线| 丰满少妇一区二区自拍区| 日韩精品高清不卡一区二区三区| 欧美中文字幕内射合集| 男女视频一区二区三区在线观看| 国产亚洲一区二区精品| 日韩欧美黄网站免费看| 一区二区三区毛片观看| 999久久免费精品国产| 日本国产一区二区精品| 日韩国产精品一区二区| 国内极品尤物视频在线| 亚洲性感美女男人的天堂| 国产精品传媒在线观看网站| 色伊人久久综合中文字幕| 91精品国产自产在线蜜臀| av剧情在线观看免费| 久久一二三四区中文字幕| 日韩av裸体在线播放| 日韩av在线黄色免费大全 | 日韩国产欧美亚洲一区不卡| 久久产精品一区二区三区日韩| 亚洲国产欧美日韩在线不卡成人 | 毛茸茸的阴户在线观看| 成人黄片免费在线播放| 亚洲五月婷婷久久综合| 亚洲av午夜福利麻豆av| 伊人激情一区二区三区| 日本人妻三级精品久久| 国产一级内射视频免费观看| 久久久精品免费中文视频| 亚洲成人大片免费在线观看| 欧美日韩伦理片在线观看| 高清免费在线自偷自拍| 欧美日韩精品乱码在线观看|