spring3零配置註解實現Bean定義(包括JSR-250、JSR-330)
註解實現Bean定義
概述
前邊介紹的Bean定義全是基於XML方式定義配置元資料,且在【12.2註解實現Bean依賴注入】一節中介紹了通過註解來減少配置數量,但並沒有完全消除在XML配置檔案中的Bean定義,因此有沒有方式完全消除XML配置Bean定義呢?
Spring提供通過掃描類路徑中的特殊註解類來自動註冊Bean定義。同註解驅動事務一樣需要開啟自動掃描並註冊Bean定義支援,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml):
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd">
- <aop:aspectj-autoproxy />
- <context:component-scan base-package="cn.javass.spring.chapter12"/>
- </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程式碼
- @Component("識別符號")
- POJO類
在類上使用@Component註解,表示該類定義為Spring管理Bean,使用預設value(可選)屬性表示Bean識別符號。
1、定義測試Bean類:
java程式碼: Java程式碼
- package cn.javass.spring.chapter12;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.ApplicationContext;
- import org.springframework.stereotype.Component;
- @Component("component")
- public class TestCompoment {
- @Autowired
- private ApplicationContext ctx;
- public ApplicationContext getCtx() {
- return ctx;
- }
- }
2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;
3、定義測試類和測試方法:
java程式碼: Java程式碼
- package cn.javass.spring.chapter12;
- //省略import
- public class ComponentDefinitionWithAnnotationTest {
- private static String configLocation = "classpath:chapter12/componentDefinitionWithAnnotation.xml";
- private static ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
- @Test
- public void testComponent() {
- TestCompoment component = ctx.getBean("component", TestCompoment.class);
- Assert.assertNotNull(component.getCtx());
- }
- }
測試成功說明被@Component註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配。
@AspectJ風格的切面可以通過@Compenent註解標識其為Spring管理Bean,而@Aspect註解不能被Spring自動識別並註冊為Bean,必須通過@Component註解來完成,示例如下:
java程式碼: Java程式碼
- package cn.javass.spring.chapter12.aop;
- //省略import
- @Component
- @Aspect
- public class TestAspect {
- @Pointcut(value="execution(* *(..))")
- private void pointcut() {}
- @Before(value="pointcut()")
- public void before() {
- System.out.println("=======before");
- }
- }
通過@Component將切面定義為Spring管理Bean。
二、@Repository:@Component擴充套件,被@Repository註解的POJO類表示DAO層實現,從而見到該註解就想到DAO層實現,使用方式和@Component相同;
1、定義測試Bean類:
java程式碼: Java程式碼
- package cn.javass.spring.chapter12.dao.hibernate;
- import org.springframework.stereotype.Repository;
- @Repository("testHibernateDao")
- public class TestHibernateDaoImpl {
- }
2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;
3、定義測試方法:
java程式碼: Java程式碼
- @Test
- public void testDao() {
- TestHibernateDaoImpl dao =
- ctx.getBean("testHibernateDao", TestHibernateDaoImpl.class);
- Assert.assertNotNull(dao);
- }
測試成功說明被@Repository註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配,並且被@Repository註解的類表示DAO層實現。
三、@Service:@Component擴充套件,被@Service註解的POJO類表示Service層實現,從而見到該註解就想到Service層實現,使用方式和@Component相同;
1、定義測試Bean類:
java程式碼: Java程式碼
- package cn.javass.spring.chapter12.service.impl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.stereotype.Service;
- import cn.javass.spring.chapter12.dao.hibernate.TestHibernateDaoImpl;
- @Service("testService")
- public class TestServiceImpl {
- @Autowired
- @Qualifier("testHibernateDao")
- private TestHibernateDaoImpl dao;
- public TestHibernateDaoImpl getDao() {
- return dao;
- }
- }
2、Spring配置檔案使用chapter12/ componentDefinitionWithAnnotation.xml即可且無需修改;
3、定義測試方法:
java程式碼: Java程式碼
- @Test
- public void testService() {
- TestServiceImpl service = ctx.getBean("testService", TestServiceImpl.class);
- Assert.assertNotNull(service.getDao());
- }
測試成功說明被@Service註解的POJO類將自動被Spring識別並註冊到Spring容器中,且自動支援自動裝配,並且被@Service註解的類表示Service層實現。
四、@Controller:@Component擴充套件,被@Controller註解的類表示Web層實現,從而見到該註解就想到Web層實現,使用方式和@Component相同;
相關推薦
spring3零配置註解實現Bean定義(包括JSR-250、JSR-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