Spring中AOP注解实现

来源:互联网 发布:曾是编程员的音乐人 编辑:程序博客网 时间:2024/06/06 00:05

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//切面注解@Aspectpublic 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 blocke.printStackTrace();}finally{System.out.println("环绕通知---最终通知");}return  result;}}








原创粉丝点击