Spring注解@Component、@Repository、@Service、@Controller區別

很長時間沒做web項目都把以前學的那點框架知識忘光了,今天把以前做的一個項目翻出來看一下發現用·@Component標記一個組件,而網上有的用@Service標記組件,我暈就查了一下資料:

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

@Service用于標注業務層組件

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

@Repository用于標注數據訪問組件,即DAO組件

@Component泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。

?
  1. @Service

  2. public class VentorServiceImpl implements iVentorService {

  3. }

  4. @Repository

  5. public class VentorDaoImpl implements iVentorDao {

  6. }

?

在一個稍大的項目中,如果組件采用xml的bean定義來配置,顯然會增加配置文件的體積,查找以及維護起來也不太方便。?
Spring2.5為我們引入了組件自動掃描機制,他在類路徑下尋找標注了上述注解的類,并把這些類納入進spring容器中管理。
它的作用和在xml文件中使用bean節點配置組件時一樣的。要使用自動掃描機制,我們需要打開以下配置信息:

代碼

?
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4. xmlns:context="http://www.springframework.org/schema/context"

  5. xsi:schemaLocation="http://www.springframework.org/schema/beans

  6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

  7. http://www.springframework.org/schema/context

  8. http://www.springframework.org/schema/context/spring-context-2.5.xsd">

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

  11. </beans>

1.component-scan標簽默認情況下自動掃描指定路徑下的包(含所有子包),將帶有@Component、@Repository、@Service、@Controller標簽的類自動注冊到spring容器。對標記了 Spring's @Required、@Autowired、JSR250's @PostConstruct、@PreDestroy、@Resource、JAX-WS's @WebServiceRef、EJB3's @EJB、JPA's @PersistenceContext、@PersistenceUnit等注解的類進行對應的操作使注解生效(包含了annotation-config標簽的作用)。

?

getBean的默認名稱是類名(頭字母小寫),如果想自定義,可以@Service(“aaaaa”)這樣來指定。
這種bean默認是“singleton”的,如果想改變,可以使用@Scope(“prototype”)來改變。

可以使用以下方式指定初始化方法和銷毀方法:

?
  1. @PostConstruct

  2. public void init() {

  3. }

  4. @PreDestroy

  5. public void destory() {

  6. }


?

注入方式:

把DAO實現類注入到action的service接口(注意不要是service的實現類)中,注入時不要new 這個注入的類,因為spring會自動注入,如果手動再new的話會出現錯誤,
然后屬性加上@Autowired后不需要getter()和setter()方法,Spring也會自動注入。??

在接口前面標上@Autowired注釋使得接口可以被容器注入,如:

?
  1. @Autowired

  2. @Qualifier("chinese")

  3. private Man man;

當接口存在兩個實現類的時候必須使用@Qualifier指定注入哪個實現類,否則可以省略,只寫@Autowired。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249021.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

春第十周作業

作業&#xff1a; 這個作業屬于那個課程C語言程序設計II這個作業要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3162我在這個課程的目標是閱讀并學習這個作業在那個具體方面幫助我實現目標知道了我們以后工作所需的是雇主所需的參…

在原生js中的事件監聽方法

一、傳統事件綁定方法我們在學習的時候&#xff0c;最初接觸的事件綁定方式大多是傳統事件綁定方法。傳統事件綁定方法事例如下&#xff1a; window.οnlοadfunction(){alert("頁面已加載"); } document.getElementById("btn").οnclickfunction(){alert(…

MySql修改數據庫編碼為UTF8

mysql 創建 數據庫時指定編碼很重要&#xff0c;很多開發者都使用了默認編碼&#xff0c;亂碼問題可是防不勝防。制定數據庫的編碼可以很大程度上避免倒入導出帶來的亂碼問題。 網頁數據一般采用UTF8編碼&#xff0c;而數據庫默認為latin 。我們可以通過修改數據庫默認編碼方式…

第六次作業(C語言)

心得體會 該題主要涉及知識點有&#xff1a;1、函數的定義&#xff1b;2、函數的調用&#xff08;即prime函數的調用&#xff09;&#xff1b;3、素數的判斷&#xff1b;4、大小排序。 看到題時我首先想到了嵌套循環&#xff0c;可是仔細一看題目要求的是用prime函數的調用&…

Javascript系列——對象元素的數組去重實現

概要 這是一篇記錄文&#xff0c;記錄數組操作對象去重的實現。 需求 有這樣一個數組 [{_id: 123,name: 張三 },{_id: 124,name: 李四 },{_id: 123,name: 張三 }] 實際上我們只需要 [{_id: 123,name: 張三 },{_id: 124,name: 李四 }] 去重 簡單數組的去重 Array.from(new Set([…

關于__getattribute__

先看一個案例 class Tree(object):def __init__(self,name):self.namenameself.cateplantdef __getattribute__(self, item):if item大樹:print(log 大樹)return 我愛大樹else:return object.__getattribute__(self,item)aaTree(rrrr) print(aa.name) print(aa.cate) 運行結果…

通過Navicat for MySQL遠程連接的時候報錯mysql 1130的解決方法

來源&#xff1a;互聯網 作者&#xff1a;佚名 時間&#xff1a;10-16 18:41:20 【大 中 小】 錯誤代碼是1130&#xff0c;ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是無法給遠程連接的用戶權限問題 Navicat for mysql 1130錯誤 用…

Java Language Changes for Java SE 9

Java9引入了module模塊的概念&#xff0c;是類與接口和數據資源的一種封裝&#xff0c;并可以聲明與其他模塊的依賴關系。這里總結一下Java9帶來的新特性。更簡練的try-with-resources語句final Resource resource1 new Resource("resource1");//a final resourceRe…

ProtocolHandler繼承體系

轉載于:https://www.cnblogs.com/GooPolaris/p/10815072.html

mysql數據庫存儲過程及調用方法

mysql數據庫存儲過程及調用方法 mysql5.0以后就支持存儲過程了&#xff0c;目前mysql的6.0Alpha版也已經推出。6.0不僅支持大型數據庫如oracle等的絕大部分功 能&#xff0c;如存儲過程、視圖、觸發器、job等等&#xff0c;而且修正了這些功能所存在的bug&#xff0c;其中6.0.1…

紅蜻蜓

日本人なら一度は耳にしたことのある曲でしょう。忘れかけている里山の風景が目に浮かびます。このあたりは昔養蠶が盛んで、何処へ行っても桑畑があったものでしたが、最近はとんと見かけません。小さい頃、よく桑の実をつんで食べたものでした。&#xff08;このあたりでは&q…

elastic學習筆記

要點 不同工具之間版本匹配很重要由點及面&#xff0c;先實踐起來再學細節的原理和使用 技術棧 laravel5.5框架scout組件elasticsearch6.3.0搜索引擎輔助 elasticsearch-head 查看集群數據可視化 中文分詞插件Ik介紹 laravel是一款現代化的php框架es是搜索引擎es-head是管理查看…

mysql 存儲過程中limit

mysql 存儲過程中limit 1、mysql的高版本&#xff08;5.5&#xff09;&#xff0c;存儲過程中的limit可以使用變量&#xff0c;如下&#xff1a;select * from student limit iStart,iNum; 2、mysql的低版本&#xff08;5.1&#xff09;&#xff0c;存儲過程中的limit不能使用…

高頻ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失敗*/}) Promise是異步編程的一種解決方案, 比傳統的解決方案--回調函數和事件更加強大.由社區最早…

NodeJS+Express+MongoDB - 張果 - 博客園

目錄 一、MongoDB 1.1、安裝MongoDB 1.1.1、配置運行環境1.1.2、運行MongoDB1.2、數據庫操作 1.2.1、創建數據庫與查看數據庫1.2.2、刪除數據庫1.2.3、插入數據1.2.4、查詢數據1.2.5、修改1.2.6、刪除二、NodeJS訪問MongoDB 2.1、安裝MongoDB訪問驅動2.2、添加數據2.3、修改數…

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理&#xff1a; $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型&#xff01;" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1&#xff1a;綜合使用 loop,[bx]&#xff0c;編寫完整匯編程序&#xff0c;實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果&#xff1a;屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…

linux開發工具之gcc

首先gcc編譯鏈接的一個實例如下所示&#xff1a; 接下來看一下gcc的常見選項&#xff1a; gcc的使用示例&#xff1a; 轉載于:https://www.cnblogs.com/wsw-seu/p/10826124.html