日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

springboot 多个sevice类实现同一接口的调用

發(fā)布時(shí)間:2023/12/2 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot 多个sevice类实现同一接口的调用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考頁(yè)面:http://blog.csdn.net/xiao190128/article/details/54890759/;感謝分享

service ?是有用的相當(dāng)于 xml配置中得bean ?id = service ?也可以不指定 不指定相當(dāng)于 bean id = ?com. service.service 就是這個(gè)類的全限定名,表示給當(dāng)前類命名一個(gè)別名,方便注入到其他需要用到的類中;不加的話,默認(rèn)別名就是當(dāng)前類名,但是首字母小寫?

Spring注解@Component、@Repository、@Service、@Controller區(qū)別

如果 Web 應(yīng)用程序采用了經(jīng)典的三層分層結(jié)構(gòu)的話,最好在持久層、業(yè)務(wù)層和控制層分別采用 @Repository、@Service 和 @Controller 對(duì)分層中的類進(jìn)行注釋,而用 @Component 對(duì)那些比較中立的類進(jìn)行注釋。?

在一個(gè)稍大的項(xiàng)目中,通常會(huì)有上百個(gè)組件,如果這些組件采用xml的bean定義來(lái)配置,顯然會(huì)增加配置文件的體積,查找以及維護(hù)起來(lái)也不太方便。 Spring2.5為我們引入了組件自動(dòng)掃描機(jī)制,他可以在類路徑底下尋找標(biāo)注了@Component,@Service,@Controller,@Repository注解的類,并把這些類納入進(jìn)spring容器中管理。它的作用和在xml文件中使用bean節(jié)點(diǎn)配置組件時(shí)一樣的。要使用自動(dòng)掃描機(jī)制,我們需要打開(kāi)以下配置信息:?
Java代碼?

1. <?xml version="1.0" encoding="UTF-8" ?> <beansxmlns="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-2.5.xsd??http://www.springframework.org/schema/context??http://www.springframework.org/schema/context/spring-context-2.5.xsd"?
2. >?
3.???
4.?<context:component-scan base-package=”com.eric.spring”>???
5. </beans>???
6. 其中base-package為需要掃描的包(含所有子包) @Service用于標(biāo)注業(yè)務(wù)層組件,@Controller用于標(biāo)注控制層組件(如struts中的action),@Repository用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件,而@Component泛指組件,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注。 ?

?

  • @Service??
  • public?class?VentorServiceImpl?implements?iVentorService{?????
  • }???
  • ??
  • Repository??
  • public?class?VentorDaoImpl?implements?iVentorDao?{???
  • }???

  • getBean的默認(rèn)名稱是類名(頭字母小寫),如果想自定義,可以@Service(“aaaaa”)這樣來(lái)指定,這種bean默認(rèn)是單例的,?
  • 如果想改變,可以使用??
  • @Service(“beanName”)??
  • @Scope(“prototype”)來(lái)改變。可以使用以下方式指定初始化方法和銷毀方法(方法名任意):??
  • @PostConstruct??
  • public?void?init()?{???
  • ?}???
  • ??
  • ?@PreDestroy??
  • ?public?void?destory()?{???
  • ?}? ?
  • 注入方式:?

    把DAO實(shí)現(xiàn)類注入到service實(shí)現(xiàn)類中,把service的接口(注意不要是service的實(shí)現(xiàn)類)注入到action中,注?

    入時(shí)不要new 這個(gè)注入的類,因?yàn)閟pring會(huì)自動(dòng)注入,如果手動(dòng)再new的話會(huì)出現(xiàn)錯(cuò)誤,然后屬性加上?

    @Autowired后不需要getter()和setter()方法,Spring也會(huì)自動(dòng)注入。

    注解:?

    在 spring的配置文件里面只需要加上<context:annotation-config/>和<context:component-scanbase-package="需要實(shí)現(xiàn)注入的類所在包"/>,

    可以使用base-package="*"表示全部的類。???

    < context:component-scan base-package=”com.eric.spring”>?

    其中base-package為需要掃描的包(含所有子包)?

    在接口前面標(biāo)上@Autowired和@Qualifier注釋使得接口可以被容器注入,當(dāng)接口存在兩個(gè)實(shí)現(xiàn)類的時(shí)候必須指定其中一個(gè)來(lái)注入,

    使用實(shí)現(xiàn)類首字母小寫的字符串來(lái)注入,如:?

    ??? @Autowired??????
    ???
    ????@Qualifier("chinese")???????
    ???
    ???? private Man man;????
    否則可以省略,只寫@Autowired??。?

    @Service服務(wù)層組件,用于標(biāo)注業(yè)務(wù)層組件,表示定義一個(gè)bean,自動(dòng)根據(jù)bean的類名實(shí)例化一個(gè)首寫字母為小寫的bean,

    例如Chinese實(shí)例化為chinese,如果需要自己改名字則:@Service("你自己改的bean名")。???

    @Controller用于標(biāo)注控制層組件(如struts中的action)?

    @Repository持久層組件,用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件?

    @Component泛指組件,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注。?


    @Service?
    public class VentorServiceImpl implements iVentorService {?
    }?

    @Repository?
    public class VentorDaoImpl implements iVentorDao {?
    }?

    getBean 的默認(rèn)名稱是類名(頭字母小寫),如果想自定義,可以@Service(“aaaaa”) 這樣來(lái)指定,這種?

    bean默認(rèn)是單例的,如果想改變,可以使用@Service(“beanName”)@Scope(“prototype”)來(lái)改變。?

    可以使用以下方式指定初始化方法和銷毀方法(方法名任意):?

    @PostConstruct?

    public void init() {?

    }?

    @PreDestroy?

    public void destory() {?

    }?

    Spring中@Autowired注解、@Resource注解的區(qū)別

    Spring不但支持自己定義的@Autowired注解,還支持幾個(gè)由JSR-250規(guī)范定義的注解,它們分別是@Resource、@PostConstruct以及@PreDestroy。
    @Resource的作用相當(dāng)于@Autowired,只不過(guò)@Autowired按byType自動(dòng)注入,而@Resource默認(rèn)按?byName自動(dòng)注入罷了。@Resource有兩個(gè)屬性是比較重要的,分是name和type,Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動(dòng)注入策略,而使用type屬性時(shí)則使用byType自動(dòng)注入策略。如果既不指定name也不指定type屬性,這時(shí)將通過(guò)反射機(jī)制使用byName自動(dòng)注入策略。
    @Resource裝配順序
    1.?如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常
    2.?如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常
    3.?如果指定了type,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常
    4.?如果既沒(méi)有指定name,又沒(méi)有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒(méi)有匹配,則回退為一個(gè)原始類型進(jìn)行匹配,如果匹配則自動(dòng)裝配;

    @Autowired?與@Resource的區(qū)別:

    1、?@Autowired與@Resource都可以用來(lái)裝配bean.都可以寫在字段上,或?qū)懺趕etter方法上。

    2、?@Autowired默認(rèn)按類型裝配(這個(gè)注解是屬業(yè)spring的),默認(rèn)情況下必須要求依賴對(duì)象必須存在,如果要允許null值,可以設(shè)置它的required屬性為false,如:@Autowired(required=false),如果我們想使用名稱裝配可以結(jié)合@Qualifier注解進(jìn)行使用,如下:

    1

    @Autowired()?@Qualifier("baseDao")

    2

    private?BaseDao baseDao;

    3、@Resource(這個(gè)注解屬于J2EE的),默認(rèn)安裝名稱進(jìn)行裝配,名稱可以通過(guò)name屬性進(jìn)行指定,如果沒(méi)有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名進(jìn)行安裝名稱查找,如果注解寫在setter方法上默認(rèn)取屬性名進(jìn)行裝配。當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。

    1

    @Resource(name="baseDao")

    2

    private?BaseDao baseDao;

    推薦使用:@Resource注解在字段上,這樣就不用寫setter方法了,并且這個(gè)注解是屬于J2EE的,減少了與spring的耦合。這樣代碼看起就比較優(yōu)雅。

    轉(zhuǎn)載于:https://www.cnblogs.com/zmdd/p/8550022.html

    總結(jié)

    以上是生活随笔為你收集整理的springboot 多个sevice类实现同一接口的调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。