1. 程式人生 > >spring3零配置註解實現Bean定義(包括JSR-250、JSR-330)

spring3零配置註解實現Bean定義(包括JSR-250、JSR-330)


 註解實現Bean定義

 概述

前邊介紹的Bean定義全是基於XML方式定義配置元資料,且在【12.2註解實現Bean依賴注入】一節中介紹了通過註解來減少配置數量,但並沒有完全消除在XML配置檔案中的Bean定義,因此有沒有方式完全消除XML配置Bean定義呢?

 

Spring提供通過掃描類路徑中的特殊註解類來自動註冊Bean定義。同註解驅動事務一樣需要開啟自動掃描並註冊Bean定義支援,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml):

 

java程式碼: Java程式碼   收藏程式碼
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop"
      
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="  
  6.        http://www.springframework.org/schema/beans  
  7.        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      
  8.        http://www.springframework.org/schema/aop  
  9.        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  10.        http://www.springframework.org/schema/context  
  11.        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  12.   
  13.     <aop:aspectj-autoproxy />  
  14.   
  15.     <context:component-scan base-package="cn.javass.spring.chapter12"/>  
  16.   
  17. </beans>  

 

       使用<context:component-scan>標籤來表示需要要自動註冊Bean定義,而通過base-package屬性指定掃描的類路徑位置。

       <context:component-scan>標籤將自動開啟“註解實現Bean依賴注入”支援。

       此處我們還通過<aop:aspectj-autoproxy/>用於開啟Spring對@AspectJ風格切面的支援。

 

Spring基於註解實現Bean定義支援如下三種註解:

  • Spring自帶的@Component註解及擴充套件@Repository、@Service、@Controller,如圖12-1所示;
  • JSR-250 1.1版本中中定義的@ManagedBean註解,是Java EE 6標準規範之一,不包括在JDK中,需要在應用伺服器環境使用(如Jboss),如圖12-2所示;
  • JSR-330的@Named註解,如圖12-3所示。

 

圖12-1 Spring自帶的@Component註解及擴充套件

 

 

圖12-2 JSR-250中定義的@ManagedBean註解及自定義擴充套件

 

 

圖12-3 JSR-330的@Named註解及自定義擴充套件

 

圖12-2和圖12-3中的自定義擴充套件部分是為了配合Spring自帶的模式註解擴充套件自定義的,並不包含在Java EE 6規範中,在Java EE 6中相應的服務層、DAO層功能由EJB來完成。

 

在Java EE中有些註解執行放置在多個地方,如@Named允許放置在型別、欄位、方法引數上等,因此一般情況下放置在型別上表示定義,放置在引數、方法等上邊一般代表使用(如依賴注入等等)。

 

 

 Spring自帶的@Component註解及擴充套件

一、@Component:定義Spring管理Bean,使用方式如下:

 

java程式碼: Java程式碼   收藏程式碼
  1. @Component("識別符號")  
  2. POJO類  

  在類上使用@Component註解,表示該類定義為Spring管理Bean,使用預設value(可選)屬性表示Bean識別符號。

 

1、定義測試Bean類:

 

java程式碼: Java程式碼   收藏程式碼
  1. package cn.javass.spring.chapter12;  
  2. import org.springframework.beans.factory.annotation.Autowired;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.stereotype.Component;  
  5. @Component("component")  
  6. public class TestCompoment {  
  7.     @Autowired  
  8.     private ApplicationContext ctx;  
  9.     public ApplicationContext getCtx() {  
  10.         return ctx;  
  11.     }  
  12. }  

 


2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;

 

3、定義測試類和測試方法:

 

java程式碼: Java程式碼   收藏程式碼
  1. package cn.javass.spring.chapter12;  
  2. //省略import  
  3. public class ComponentDefinitionWithAnnotationTest {  
  4.     private static String configLocation = "classpath:chapter12/componentDefinitionWithAnnotation.xml";  
  5.     private static ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);  
  6.     @Test  
  7.     public void testComponent() {  
  8.         TestCompoment component = ctx.getBean("component", TestCompoment.class);  
  9.         Assert.assertNotNull(component.getCtx());  
  10.     }  
  11. }  

    測試成功說明被@Component註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配。

 

@AspectJ風格的切面可以通過@Compenent註解標識其為Spring管理Bean,而@Aspect註解不能被Spring自動識別並註冊為Bean,必須通過@Component註解來完成,示例如下:

 

java程式碼: Java程式碼   收藏程式碼
  1. package cn.javass.spring.chapter12.aop;  
  2. //省略import  
  3. @Component  
  4. @Aspect  
  5. public class TestAspect {  
  6.     @Pointcut(value="execution(* *(..))")  
  7.     private void pointcut() {}  
  8.     @Before(value="pointcut()")  
  9.     public void before() {  
  10.         System.out.println("=======before");  
  11.     }  
  12. }  

 

 

通過@Component將切面定義為Spring管理Bean。

 

 

二、@Repository:@Component擴充套件,被@Repository註解的POJO類表示DAO層實現,從而見到該註解就想到DAO層實現,使用方式和@Component相同;

      

1、定義測試Bean類:

 

java程式碼: Java程式碼   收藏程式碼
  1. package cn.javass.spring.chapter12.dao.hibernate;  
  2. import org.springframework.stereotype.Repository;  
  3. @Repository("testHibernateDao")  
  4. public class TestHibernateDaoImpl {  
  5.    
  6. }  

 

 

2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;

 

3、定義測試方法:

 

java程式碼: Java程式碼   收藏程式碼
  1. @Test  
  2. public void testDao() {  
  3. TestHibernateDaoImpl dao =  
  4. ctx.getBean("testHibernateDao", TestHibernateDaoImpl.class);  
  5. Assert.assertNotNull(dao);  
  6. }  

    測試成功說明被@Repository註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配,並且被@Repository註解的類表示DAO層實現。

 

 

三、@Service:@Component擴充套件,被@Service註解的POJO類表示Service層實現,從而見到該註解就想到Service層實現,使用方式和@Component相同;

 

1、定義測試Bean類:

 

java程式碼: Java程式碼   收藏程式碼
  1. package cn.javass.spring.chapter12.service.impl;  
  2. import org.springframework.beans.factory.annotation.Autowired;  
  3. import org.springframework.beans.factory.annotation.Qualifier;  
  4. import org.springframework.stereotype.Service;  
  5. import cn.javass.spring.chapter12.dao.hibernate.TestHibernateDaoImpl;  
  6. @Service("testService")  
  7. public class TestServiceImpl {  
  8.     @Autowired  
  9.     @Qualifier("testHibernateDao")  
  10.     private TestHibernateDaoImpl dao;  
  11.     public TestHibernateDaoImpl getDao() {  
  12.         return dao;  
  13.     }  
  14. }  

 

2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;

 

 

3、定義測試方法:

 

java程式碼: Java程式碼   收藏程式碼
  1. @Test  
  2. public void testService() {  
  3.     TestServiceImpl service = ctx.getBean("testService", TestServiceImpl.class);  
  4.     Assert.assertNotNull(service.getDao());  
  5. }  

 

測試成功說明被@Service註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配,並且被@Service註解的類表示Service層實現。

 

 

四、@Controller:@Component擴充套件,被@Controller註解的類表示Web層實現,從而見到該註解就想到Web層實現,使用方式和@Component相同;

 

相關推薦

spring3配置註解實現Bean定義(包括JSR-250JSR-330)

 註解實現Bean定義  概述 前邊介紹的Bean定義全是基於XML方式定義配置元資料,且在【12.2註解實現Bean依賴注入】一節中介紹了通過註解來減少配置數量,但並沒有完全消除在XML配置檔案中的Bean定義,因此有沒有方式完全消除XML配置Be

Spring註解實現Bean定義

12.3.1  概述 前邊介紹的Bean定義全是基於XML方式定義配置元資料,且在【12.2註解實現Bean依賴注入】一節中介紹了通過註解來減少配置數量,但並沒有完全消除在XML配置檔案中的Bean定義,因此有沒有方式完全消除XML配置Bean定義呢?

[學習筆記]Spring註解實現Bean

12.4  基於Java類定義Bean配置元資料 12.4.1  概述 基於Java類定義Bean配置元資料,其實就是通過Java類定義Spring配置元資料,且直接消除XML配置檔案。 基於Java類定義Bean配置元資料中的@Configuration註解的類等價於XML配置檔案

Spring 註解實現Bean依賴注入之@Qualifier

三、@Qualifier:限定描述符,用於細粒度選擇候選者; @Autowired預設是根據型別進行注入的,因此如果有多個型別一樣的Bean候選者,則需要限定其中一個候選者,否則將丟擲異常 @Qualifier限定描述符除了能根據名字進行注入,更能進行更細粒度的控制如何選擇

Spring 註解實現Bean依賴注入之@Required

對應於基於XML配置中的依賴檢查,但XML配置的依賴檢查將檢查所有setter方法; 基於@Required的依賴檢查表示註解的setter方法必須,即必須通過在XML配置中配置setter注入,如果沒有配置,在容器啟動時會丟擲異常,從而保證在執行時不會遇到空指標異常,@Required只能放置在set

使用註解實現 bean 轉 csv

csv 檔案是以  aaa,bbb,ccc aaa,bbb,ccc 儲存的 這裡的要求是將 List<T> 型別的線性表 轉化成 類似 html 中 table的格式,即第一行是 head 後面是 body 使用註解的效果如下 :

品Spring:實現bean定義時採用的“先進生產力”

前景回顧當我們把寫好的業務程式碼交給Spring之後,Spring都會做些什麼呢?仔細想象一下,再稍微抽象一下,Spring所做的幾乎全部都是:“bean的例項化,bean的依賴裝配,bean的初始化,bean的方法呼叫,bean的銷燬回收”。那問題來了,Spring為什麼能夠準確無誤

詳解RecyclerView+BGARefreshLayout實現定義下拉重新整理上拉載入和側滑刪除效果

前言 還有2個月就過年了,對於我們這樣在外漂泊的異鄉人來說,一家人團聚在一起,吃一頓團圓飯,那是再幸福不過的事了。我們之所以遠離家鄉來到異鄉就像異鄉人這首歌寫的一樣,只為一扇窗! 正文 上篇文章給大家講解了一下關於RecyclerView的使用,今天給

spring3和struts2整合實現配置的教程

我們目前做的專案使用的就是這種方式,今天比較有空,就寫了個demo演示下這個功能。所謂的零配置其實並不是沒有配置檔案,只是約定大於配置而已,約定做好了,整個專案都會清晰明瞭很多。詳細的約定在struts2-spring-plugin-xxx.jar裡面的struts-

寫分散式RPC框架 系列 2.0 (4)使用BeanPostProcessor實現定義@RpcReference註解注入

之前服務提供方 RpcServer 我們是使用 ApplicationContextAware 來掃描 @RpcService 註解,新增一個註解即可實現服務暴露。現在,我們用 BeanPostProcessor 來實現服務注入,自動將服務實現類注入到被@RpcReference註解標記

Spring+SpringMVC+Mybatis 利用AOP自定義註解實現配置

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 5

@Cacheable註解spring3中的使用-實現緩存

int 分解 之前 註意 什麽 title sco 下回 fin 轉: http://blog.csdn.net/chenleixing/article/details/44815443 在軟件開發中使用緩存已經有一個非常久的歷史了。緩存是一種很好的設計思想,一旦你用了

Bean裝配之註解實現

tro filter http nco 一個 service pack logs con Spring可以自動檢測類並註冊Bean到ApplicationContext中。 圖解:配置<context:component-scan>後component組件會

Spring3 Schedule Task之註解實現 (兩次起動Schedule Task 的解決方案)

什麽 empty task 文件中 註解 work lin schedule ask Spring3 Schedule Task之註解實現 (兩次起步Schedule Task 的解決方案)Spring3 Schedule Task之註解實現 (兩次啟動Schedule T

spring mvc實現定義註解

poi org param 運行時 onf dha ogg logs exec 實現方式:使用@Aspect實現: 1. 新建註解接口:CheckSign package com.soeasy.web.utils; import org.springframework.

SpringVC 攔截器+自定義註解 實現權限攔截

json.js 加載 bean media tar attr esp 權限 encoding 1.springmvc配置文件中配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w

基於AOP註解實現業務功能的動態配置

引擎 sin equal cgroups list tro com pan inter 一、導入jar包 <dependency><!-- 4.引入AOP--> <groupId>org.springframework.boot

Spring中註解注入bean配置檔案注入bean

註解的方式確實比手動寫xml檔案注入要方便快捷很多,省去了很多不必要的時間去寫xml檔案 按以往要注入bean的時候,需要去配置一個xml,當然也可以直接掃描包體,用xml注入bean有以下方法: 1 <?xml version="1.0" encoding="UTF-8"?> 2

Spring AOP 自定義註解實現日誌管理

目錄 一、配置檔案 二、新建一個日誌實體類Log 三、編寫 service 層 四、編寫 service 層的實現 serviceimpl 五、自定義註解類 六、編寫切面類 七、spring + aop 需要的 jar 包 部落格的程式碼是基於 SSM 環境編寫的

(D)spring boot使用註解類代替xml配置例項化bean

bean經常需要被例項化,最常見的就是new一個唄,Bean bean = new Bean(),方便好用還快捷。 然而在我們剛開始學習寫i專案的時候卻發現,new不好用哦,並且也不報錯,根本不知道怎麼找原因 比如 package com.example; import org.springfr