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

一個@Component注解引發(fā)的大坑

 更新時間:2021年09月08日 14:26:21   作者:老汪丶  
這篇文章主要介紹了一個@Component注解引發(fā)的大坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一個@Component注解引發(fā)的大坑

首先,我們這個是用springboot架構(gòu)來實現(xiàn)的業(yè)務(wù)

這是項目包結(jié)構(gòu)和配置文件結(jié)構(gòu)

這是項目包結(jié)構(gòu)

這是配置文件結(jié)構(gòu)

這是定時需要執(zhí)行的任務(wù)

這是加了Component注解

這是我執(zhí)行PromoCodeCMCJob這個定時器的報錯信息

問題是這樣的

加了兩個MQ之后才報錯的這個信息,當(dāng)我執(zhí)行啟動PromoCodeCMCJob定時任務(wù)的時候就報錯,報錯信息如上,這個時候我兩個MQ任務(wù)的定時任務(wù)都加了@Component和 @Autowired private MQProduceFactory gpRepayProducer 注入,此時就報錯了,

剛開始的時候我只是 @Autowired private MQProduceFactory gpRepayProducer 注釋掉然后再啟動PromoCodeCMCJob這個定時任務(wù),什么,居然沒問題,這個時候完全能執(zhí)啟動,所以此時我就斷定是這個MQProduceFactory注入原因引起的,但是我有MQ隊列,這個是MQ的生產(chǎn)者,

注釋掉就不能忘MQ生產(chǎn)消息了,所以注釋掉這個是不行的,然后我就想其它辦法去解決,像重新分包,想了各種解決辦法都沒有解決,始終沒有想到去掉@Component這個注解,這個注解翻譯是組件的意思,

是把當(dāng)前類注入到IOC容器中,直到我研究了半天左右的時候,一直沒有想到點上,浪費了很多時間,快下班了的時候讓我想到了,既然被在IOC容器中了,那我不把他注入進去不就完了,這是我就試著把@Component注解去掉,然后在配置文件中加入bean,變成了這樣

配置文件中不加這個bean的話啟動定時任務(wù)也是會報錯的,這樣的話我就把需要的MQProduceFactory這個放入到bean里面了,而沒有在IOC了,最后就完美的解決了,有MQ三個定時任務(wù)都能運行了!

思考

@Component注解是IOC容器層面的,是個很大的容器,能包容很多,而bean只是一個工廠,IOC容器能包含著bean工廠,IOC容器中可以有很多bean工廠,

但是bean里面只有一個,一般都是通過bean標(biāo)簽的id來標(biāo)識的,所以在項目中沒有最完美的方案,只有更好的方案,只有把架構(gòu),方案都用對了,才能更好去解決業(yè)務(wù)需求的問題。

對spring @component注解的理解

  • 1、@controller 控制器(注入服務(wù))
  • 2、@service 服務(wù)(注入dao)
  • 3、@repository dao(實現(xiàn)dao訪問)
  • 4、@component (把普通pojo實例化到spring容器中,相當(dāng)于配置文件中的<bean id="" class=""/>)

Spring 2.5 中除了提供 @Component 注釋外,還定義了幾個擁有特殊語義的注釋,它們分別是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個注釋和 @Component 是等效的,但是從注釋類的命名上,很容易看出這 3 個注釋分別和持久層、業(yè)務(wù)層和控制層(Web 層)相對應(yīng)。雖然目前這 3 個注釋和 @Component 相比沒有什么新意,但 Spring 將在以后的版本中為它們添加特殊的功能。所以,如果 Web 應(yīng)用程序采用了經(jīng)典的三層分層結(jié)構(gòu)的話,最好在持久層、業(yè)務(wù)層和控制層分別采用 @Repository、@Service 和 @Controller 對分層中的類進行注釋,而用 @Component 對那些比較中立的類進行注釋。

在 一個稍大的項目中,通常會有上百個組件,如果這些組件采用xml的bean定義來配置,顯然會增加配置文件的體積,查找以及維護起來也不太方便。 Spring2.5為我們引入了組件自動掃描機制,他可以在類路徑底下尋找標(biāo)注了 @Component,@Service,@Controller,@Repository注解的類,并把這些類納入進spring容器中管理。它的作用 和在xml文件中使用bean節(jié)點配置組件時一樣的。

今天在做項目時把一個既不是業(yè)務(wù)控制(Controller)、又不是業(yè)務(wù)邏輯(Service)、也不是數(shù)據(jù)訪問(Dao)的類在不理解用注解@component的情況下注解成為Controller使用,結(jié)果肯定是有問題了,所以請教以后發(fā)現(xiàn)只用@component注解就完全可以解決了,所以在網(wǎng)上查閱了@component注解,特此記錄一下,方便日后查閱。

1、@controller 控制器(注入服務(wù))

  • 用于標(biāo)注控制層,相當(dāng)于struts中的action層

2、@service 服務(wù)(注入dao)

  • 用于標(biāo)注服務(wù)層,主要用來進行業(yè)務(wù)的邏輯處理

3、@repository(實現(xiàn)dao訪問)

  • 用于標(biāo)注數(shù)據(jù)訪問層,也可以說用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件.

4、@component (把普通pojo實例化到spring容器中,相當(dāng)于配置文件中的 <bean id="" class=""/>)

  • 泛指各種組件,就是說當(dāng)我們的類不屬于各種歸類的時候(不屬于@Controller、@Services等的時候),我們就可以使用@Component來標(biāo)注這個類。

說明:

<context:component-scan base-package=”com.*”> 

上面的這個例子是引入Component組件的例子,其中base-package表示為需要掃描的所有子包。

共同點:被@controller 、@service、@repository 、@component 注解的類,都會把這些類納入進spring容器中進行管理

@Component注解的使用

@Component取代 或者 @Component(“id”) 取代配置文件applicationContext.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:context="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 
                           http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 組件掃描,掃描含有注解的類 -->
    <context:component-scan base-package="com.fly.spring.annotation"></context:component-scan>
</beans>

注解的類

package com.fly.spring.annotation; 
import org.springframework.stereotype.Component; 
@Component("person")
public class Person { 
    public void getString(){
        System.out.println("*********hello everyOne**********");
    }
}

測試的類

package com.fly.spring.annotation; 
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; 
public class TestDemo {
 
    @Test
    public void demo(){
        String xmlpath = "com/fly/spring/annotation/applicationContext.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(xmlpath);
        Person bean = (Person) context.getBean("person");
        bean.getString();
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分享Java多線程實現(xiàn)的四種方式

    分享Java多線程實現(xiàn)的四種方式

    這篇文章主要介紹了分享Java多線程實現(xiàn)的四種方式,文章基于?Java的相關(guān)資料展開多線程的詳細介紹,具有一的的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 如何在Java中獲取當(dāng)前年份(實例代碼)

    如何在Java中獲取當(dāng)前年份(實例代碼)

    在Java語言中獲取當(dāng)前年份有幾種方法:使用java.util包下的Calendar類,使用java.time包下的LocalDate類或者使用java.text包下的SimpleDateFormat類,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-11-11
  • Java String字符串補0或空格的實現(xiàn)代碼

    Java String字符串補0或空格的實現(xiàn)代碼

    這篇文章主要介紹了Java String字符串補0或空格的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • spring-data-jpa中findOne與getOne的區(qū)別說明

    spring-data-jpa中findOne與getOne的區(qū)別說明

    這篇文章主要介紹了spring-data-jpa中findOne與getOne的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java常用集合之Set和Map的用法詳解

    Java常用集合之Set和Map的用法詳解

    這篇文章將通過一些示例為大家詳細介紹一下Java常用集合中Set和Map的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • Springboot?-?Fat?Jar示例詳解

    Springboot?-?Fat?Jar示例詳解

    這篇文章主要介紹了Springboot?-?Fat?Jar詳解,Spring?Boot內(nèi)嵌容器,通過java?-jar命令便可以直接啟動應(yīng)用,今天帶著大家探索FAT?JAR啟動的背后原理,需要的朋友可以參考下
    2023-02-02
  • SpringBoot2整合ElasticJob框架過程詳解

    SpringBoot2整合ElasticJob框架過程詳解

    這篇文章主要介紹了SpringBoot2整合ElasticJob框架過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot解決數(shù)據(jù)庫時間和返回時間格式不一致的問題

    SpringBoot解決數(shù)據(jù)庫時間和返回時間格式不一致的問題

    這篇文章主要介紹了SpringBoot解決數(shù)據(jù)庫時間和返回時間格式不一致的問題,文章通過代碼示例和圖文結(jié)合的方式講解的非常詳細,對大家的學(xué)習(xí)和工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解

    java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解

    這篇文章主要為大家介紹了java面向?qū)ο笤O(shè)計原則之里氏替換原則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-10-10
  • struts2+spring+ibatis框架整合實現(xiàn)增刪改查

    struts2+spring+ibatis框架整合實現(xiàn)增刪改查

    這篇文章主要為大家詳細介紹了struts2+spring+ibatis框架整合實現(xiàn)增刪改查操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

泌阳县| 阳城县| 思茅市| 新余市| 龙里县| 罗平县| 陆河县| 翁牛特旗| 原平市| 晋州市| 内乡县| 永顺县| 临夏市| 烟台市| 怀来县| 柳州市| 汽车| 东港市| 监利县| 道孚县| 湾仔区| 潞西市| 汉中市| 泊头市| 山丹县| 湘乡市| 万安县| 丘北县| 新干县| 太原市| 枣强县| 托克逊县| 屯昌县| 金湖县| 南投市| 固原市| 莱西市| 盐山县| 河池市| 收藏| 云霄县|