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

深入理解java的spring-ioc的使用

 更新時(shí)間:2019年03月12日 15:31:35   作者:張占嶺(倉(cāng)儲(chǔ)大叔,Lind)  
這篇文章主要介紹了java的spring-ioc的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

spring-ioc的使用

IOC容器在很多框架里都在使用,而在spring里它被應(yīng)用的最大廣泛,在框架層面上,很多功能都使用了ioc技術(shù),下面我們看一下ioc的使用方法。

  1. 把服務(wù)注冊(cè)到ioc容器
  2. 使用屬性注入反射對(duì)應(yīng)類(lèi)型的實(shí)例
  3. 多態(tài)情況下,使用名稱(chēng)反射類(lèi)型的實(shí)例

把服務(wù)注冊(cè)到ioc容器

@Bean注冊(cè)組件
使用@Bean注解進(jìn)行類(lèi)型的注冊(cè),默認(rèn)你的ioc容器里類(lèi)型為bean的返回值,名稱(chēng)為bean所有的方法名,與你的包名稱(chēng)沒(méi)有直接關(guān)系,如果你的接口有多種實(shí)現(xiàn),在注冊(cè)時(shí)可以使用@Bean("lind")這種方式來(lái)聲明。

@Component,@Configuration,Service,Repository注冊(cè)組件

這幾個(gè)注解都是在類(lèi)上面聲明的,而@Bean是聲明在方法上的,這一點(diǎn)要注意,這幾個(gè)注解一般是指對(duì)一個(gè)接口的實(shí)現(xiàn),在實(shí)現(xiàn)類(lèi)上加這些注解,例如,一個(gè)數(shù)據(jù)倉(cāng)儲(chǔ)接口UserRepository,它可以有多種數(shù)據(jù)持久化的方式,如SqlUserRepositoryImpl和MongoUserRepositoryImpl,那么在注冊(cè)時(shí)你需要為他們起一個(gè)別名,如@Repository("Sql-UserRepositoryImpl) qlUserRepositoryImpl,默認(rèn)的名稱(chēng)是類(lèi)名,但注意類(lèi)名首字母為小寫(xiě)

public interface EmailLogService {
 void send(String email, String message);
}

@Component()
public class EmailLogServiceHttpImpl implements EmailLogService {
 private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceHttpImpl.class);

 @Override
 public void send(String email, String message) {
 Assert.notNull(email, "email must not be null!");
 logger.info("send email:{},message:{}", email, message);
 }
}
@Component("email-socket")
public class EmailLogServiceSocketImpl implements EmailLogService {
 private static final Logger logger = LoggerFactory.getLogger(EmailLogServiceSocketImpl.class);

 @Override
 public void send(String email, String message) {
 Assert.notNull(email, "email must not be null!");
 logger.info("send email2:{},message:{}", email, message);
 }
}
// 看一下調(diào)用時(shí)的測(cè)試代碼
 @Resource(name = "email-socket")
 EmailLogService socketEmail;
 @Autowired
 @Qualifier( "emailLogServiceHttpImpl")
 EmailLogService httpEmail;

 @Test
 public void testIoc2() {
 socketEmail.send("ok", "ok");
 }


 @Test
 public void testIoc1() {
 httpEmail.send("ok", "ok");
 }

在程序中使用bean對(duì)象

1.使用Resource裝配bean對(duì)象
在通過(guò)別名調(diào)用bean時(shí),你可以使用@Resource注解來(lái)裝配對(duì)象

2.使用@Autowired裝配bean對(duì)象
也可以使用 @Autowired
@Qualifier( "emailLogServiceHttpImpl")兩個(gè)注解去實(shí)現(xiàn)程序中的多態(tài)。

使用場(chǎng)景

在我們有些相同行為而實(shí)現(xiàn)方式不同的場(chǎng)景中,如版本1接口與版本2接口,在get方法實(shí)現(xiàn)有所不同,而這
兩個(gè)版本都要同時(shí)保留,這時(shí)我們需要遵守開(kāi)閉原則,擴(kuò)展一個(gè)新的接口,而在業(yè)務(wù)上對(duì)代碼進(jìn)行重構(gòu),
提取兩個(gè)版本相同的方法到基類(lèi),自己維護(hù)各自獨(dú)有的方法,在為它們的bean起個(gè)名字,在裝配時(shí),通過(guò)
bean的名稱(chēng)進(jìn)行裝配即可。

寫(xiě)個(gè)偽代碼:

class Api_version1(){
@Autowired 
@Qualifier("print-version1")
PrintService printService;
}

class Api_version2(){
@Autowired 
@Qualifier("print-version2")
PrintService printService;
}

class BasePrintService{}

interface PrintService{}

@Service("print-version1")
class PrintServiceImplVersion1 extends BasePrintService implements PrintService{}

@Service("print-version2")
class PrintServiceImplVersion2 extends BasePrintService implements PrintService{}

以上所述是小編給大家介紹的java的spring-ioc的使用詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié)

    SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié)

    本文主要介紹了SpringBoot項(xiàng)目鑒權(quán)的4種方式小結(jié),包括傳統(tǒng)AOP、攔截器、參數(shù)解析器和過(guò)濾器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot RabbitMQ 延遲消息實(shí)現(xiàn)完整版示例

    Spring Boot RabbitMQ 延遲消息實(shí)現(xiàn)完整版示例

    本篇文章主要介紹了Spring Boot RabbitMQ 延遲消息實(shí)現(xiàn)完整版示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • java多線(xiàn)程之線(xiàn)程,進(jìn)程和Synchronized概念初解

    java多線(xiàn)程之線(xiàn)程,進(jìn)程和Synchronized概念初解

    這篇文章主要介紹了java多線(xiàn)程之線(xiàn)程,進(jìn)程和Synchronized概念初解,涉及進(jìn)程與線(xiàn)程的簡(jiǎn)單概念,實(shí)現(xiàn)多線(xiàn)程的方式,線(xiàn)程安全問(wèn)題,synchronized修飾符等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Spring核心容器之BeanDefinition解析

    Spring核心容器之BeanDefinition解析

    這篇文章主要介紹了Spring核心容器之BeanDefinition解析,Spring 將管理的對(duì)象稱(chēng)之為 Bean,容器會(huì)先實(shí)例化 Bean,然后自動(dòng)注入,實(shí)例化的過(guò)程就需要依賴(lài) BeanDefinition,需要的朋友可以參考下
    2023-11-11
  • jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢(xún)的兩種方法

    jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢(xún)的兩種方法

    這篇文章主要介紹了jpa實(shí)現(xiàn)多對(duì)多的屬性時(shí)查詢(xún)的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java Swing JPanel面板的使用方法

    Java Swing JPanel面板的使用方法

    這篇文章主要介紹了Java Swing JPanel面板的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 關(guān)于Java for循環(huán)的正確用法介紹

    關(guān)于Java for循環(huán)的正確用法介紹

    Java里的循環(huán)結(jié)構(gòu)我們可以通過(guò)while、do-while、for、foreach等方式實(shí)現(xiàn)循環(huán),這篇文章會(huì)把這幾種循環(huán)方式都給大家講解到,但本文主要介紹for循環(huán)的使用,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Java的布爾類(lèi)型基本介紹

    Java的布爾類(lèi)型基本介紹

    這篇文章主要介紹了Java的布爾類(lèi)型,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Spring?IOC中的組件掃描

    Spring?IOC中的組件掃描

    通過(guò)自動(dòng)掃描,Spring?會(huì)自動(dòng)從掃描指定的包及其子包下的所有類(lèi),并根據(jù)類(lèi)上的特定注解將該類(lèi)裝配到容器中,而無(wú)需在?XML?配置文件或?Java?配置類(lèi)中逐一聲明每一個(gè)?Bean,這篇文章主要介紹了Spring?IOC中的組件掃描,需要的朋友可以參考下
    2022-05-05
  • java實(shí)現(xiàn)字符串like和not?like的使用示例

    java實(shí)現(xiàn)字符串like和not?like的使用示例

    在Java中,我們經(jīng)常需要對(duì)字符串進(jìn)行模式匹配操作,字符串的模式匹配通常使用like和not?like這兩個(gè)運(yùn)算符進(jìn)行,本文就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2023-09-09

最新評(píng)論

仁化县| 凤城市| 潞城市| 新宾| 聂拉木县| 柞水县| 盐边县| 大港区| 理塘县| 精河县| 新邵县| 平南县| 阳山县| 新津县| 城口县| 安岳县| 平罗县| 海伦市| 连云港市| 江油市| 渝中区| 霸州市| 那曲县| 木兰县| 昔阳县| 云林县| 电白县| 大丰市| 阿图什市| 轮台县| 孟津县| 台东县| 拜城县| 禹州市| 孟连| 电白县| 扎赉特旗| 稻城县| 巫山县| 亚东县| 博乐市|