1. 程式人生 > >Spring中AOP註解實現

Spring中AOP註解實現

1.AOP的jar包依賴

 <!--aop的jar包依賴  -->
        <dependency> 
		 <groupId>org.aspectj</groupId>
		 <artifactId>aspectjweaver</artifactId>
		 <version>1.8.9</version> 
		</dependency>
		


2.beans.xml配置

(1)新增名稱空間

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop.xsd
(2)配置AOP代理
<aop:aspectj-autoproxy/>
beans.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"
    xmlns:aop="http://www.springframework.org/schema/aop"
    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
        http://www.springframework.org/schema/aop
 		http://www.springframework.org/schema/aop/spring-aop.xsd
        ">

	<!-- 配置掃描器   掃描包的範圍    不代表該範圍下所有的bean都被例項化,需要藉助註解配合使用-->
	<context:component-scan base-package="com.shsxt"></context:component-scan>
	<context:annotation-config />
	<!--開啟代理標識,在程式執行期,動態建立目標物件代理物件  -->
	<aop:aspectj-autoproxy/>
	
	
	
    


</beans>
3.編寫業務程式碼
package com.yonyou.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @author Administrator
 *
 */
@Component
//切面註解
@Aspect
public class LogCut {
	//切入點註解
	@Pointcut("execution(* com.yonyou.service..*.*(..))")
	public void cut(){}
	
	//目標類方法執行前執行該方法
	@Before(value="cut()")
	public void before(){
		System.out.println("目標類方法執行前執行該方法........");
	}
	
	@AfterReturning(value="cut()")
	public void afterReturn(){
		System.out.println("方法正常結束後執行該輸出");
	}
	
	@After(value="cut()")
	public void after(){
		System.out.println("最終通知,方法無論是否發生異常,都會執行該輸出");
	}
	
	@AfterThrowing(value="cut()", throwing="e")
	public void afterThrow(Exception e){
		System.out.println("如果方法執行發生異常,執行該輸出"+e);
	}
	
	@Around(value="cut()")
	public Object around(ProceedingJoinPoint pjp){
		Object result=null;
		System.out.println("環繞通知---前置通知");
		try {
			Object[] params=pjp.getArgs();//獲取方法引數
			if(null!=params||params.length>0){
				for (Object object : params) {
					System.out.println(object.toString());
				}
			}
			System.out.println("方法簽名:"+pjp.getSignature());//獲取方法簽名
			System.out.println("目標類"+pjp.getTarget());//目標類
			result=pjp.proceed();//執行目標物件的方法
			System.out.println("環繞通知---後置通知");
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			System.out.println("環繞通知---最終通知");
		}
		return  result;
		
	}

}


相關推薦

SpringAOP註解實現

1.AOP的jar包依賴 <!--aop的jar包依賴 --> <dependency> <groupId>org.aspectj<

SpringAop實現

Spring中AOP的實現分為兩種: 一、Java配置實現 1、通過註解定義攔截規則 2、通過方法路徑定義攔截規則 二、XML配置實現 1、通過註解定義攔截規則 2、通過方法路徑定義攔截規則  一、Java配置實現 (1)Java配置實現,定義一個註解

Spring@Async註解實現“方法”的非同步呼叫

簡單介紹: Spring為任務排程與非同步方法執行提供了註解支援。通過在方法上設定@Async註解,可使得方法被非同步呼叫。也就是說呼叫者會在呼叫時立即返回,而被呼叫方法的實際執行是交給Spring的TaskExecutor來完成。 開啟@Async註解: <task:annotation

spring學習教程-SpringAOP實現

Spring中AOP的實現 一.AOP(Aspect Oriented Programming) 面向切面程式設計   (1). spring中AOP功能的實現有以下倆種情況:1.如果目標物件實現了介面,預設情況下會採用JDK的動態代理來實現AOP功能2.如果目標物件沒有實

SpringAOP方式實現多資料來源切換

spring動態配置多資料來源,即在大型應用中對資料進行切分,並且採用多個資料庫例項進行管理,這樣可以有效提高系統的水平伸縮性。而這樣的方案就會不同於常見的單一資料例項的方案,這就要程式在執行時根據當時的請求及系統狀態來動態的決定將資料儲存在哪個資料庫例項中,以及從

淺析SpringAOP實現原理——動態代理

# 一、前言   最近在複習``Spring``的相關內容,剛剛大致研究了一下``Spring``中,``AOP``的實現原理。這篇部落格就來簡單地聊一聊``Spring``的``AOP``是如何實現的,並通過一個簡單的測試用例來驗證一下。廢話不多說,直接開始。 # 二、正文 #

springaop註解實現方式簡單實例

xsd 說話 2017年 nco 執行 str throw tar pac   上篇中我們講到spring的xml實現,這裏我們講講使用註解如何實現aop呢。前面已經講過aop的簡單理解了,這裏就不在贅述了。 註解方式實現aop我們主要分為如下幾個步驟(自己整理的,有更好的

淺談springAOP以及springAOP註解方式

早就 好的 面向 XML ram ati alt 返回 增強   AOP(Aspect Oriented Programming):AOP的專業術語是"面向切面編程" 什麽是面向切面編程,我的理解就是:在不修改源代碼的情況下增強功能.好了,下面在講述aop註解方式的情況下順

SpringAOP:Proxy動態代理淺解析(被代理對象必須實現接口)

ima throwable light public RR eth 對象 處理 span 小貼士:以下內容純屬個人觀點,如有不當請指出並諒解 import java.lang.reflect.Proxy; Proxy可以動態代理一個對象 寫一個代理工廠類ProxyFac

知識儲備:詳解SpringAOP原理(基於註解版)2

接著上一篇部落格講,上一篇部落格地址:https://blog.csdn.net/qq_36625757/article/details/83652173 8.之前我們說過,測試方法在執行時new了一個AnnotationConfigApplicationContext傳入一個配置類,呼叫了re

java代理,靜態代理,動態代理以及spring aop代理方式,實現原理統一彙總 SpringAOP的兩種代理方式(Java動態代理和CGLIB代理)

若代理類在程式執行前就已經存在,那麼這種代理方式被成為 靜態代理 ,這種情況下的代理類通常都是我們在Java程式碼中定義的。 通常情況下, 靜態代理中的代理類和委託類會實現同一介面或是派生自相同的父類。 一、概述1. 什麼是代理我們大家都知道微商代理,簡單地說就是代替廠家賣商品,廠家“委託”代理為

Spring --13.SpringAOP程式設計(註解方式)

1、基於註解AOP入門案例 1.2、建立工程引入依賴 pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId&

springAOP的兩種實現方式

1.方法一:註解實現 介面類 public interface User { public void work(); } 具體實現類 public class IUser implements User { public void work() {

Spring基礎學習(四 AOP 註解實現

配置XML  applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

Spring Aop+註解實現日誌記錄

系統業務操作日誌記錄是每個系統必不可少的一部分,但通常的做法是在每個需要記錄日誌的地方,呼叫新增日誌的Service方法,這樣做主要是顯的麻煩。 我們可以使用Spring AOP結合註解來實現這一功能。 1、首先定義一個註解類,如下: @Target(

spring boot使用註解實現模糊查詢

//模糊查詢(根據姓名和登記日期模糊查詢所有資料) @Select({"select * from putong_rencai where concat(name,dengji_time

SpringAOP實現的兩種方式之JDK和cglib的動態代理

AOP的實現原理: 都是基於代理模式,都是生成一個大代理物件 靜態AOP: AspectJ實現的AOP, 將切面程式碼直接編譯到Java類檔案中 --- 實現: JDK提供的動態代理技術 動態AOP: 將切面程式碼進行動態織入實現的AOP --- Spring的AOP為動態

Spring Boot@ConfigurationProperties註解實現原理原始碼解析

0. 開源專案推薦 Pepper Metrics是我與同事開發的一個開源工具(https://github.com/zrbcool/pepper-metrics),其通過收集jedis/mybatis/httpservlet/dubbo/motan的執行效能統計,並暴露成prometheus等主流時序資料庫相

spring 使用註解

contex repos 使用註解 qualifier 說明 cast pri web .post 1、要在applicationContext.xml中配置掃描哪個包下的註解 <!-- 指定掃描cn.itcast.bean報下的所有類中的註解. 註意:掃

SpringAOP簡介與使用

註釋 修改 http 修飾 width get 出現 dynamic value Spring中AOP簡介與使用 什麽是AOP? Aspect Oriented Programming(AOP),多譯作 “面向切面編程”,也就是說,對一段程序,從側面插入,進行操做。即通過預