首页 > 编程 > Java > 正文

SpringAOP中的注解配置详解

2019-11-26 08:24:26
字体:
来源:转载
供稿:网友

这篇文章主要介绍了SpringAOP中的注解配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用注解实现SpringAOP的功能:

例子:

//表示这是被注入Spring容器中的@Component//表示这是个切面类@Aspectpublic class AnnotationHandler {	/** 在一个方法上面加上注解来定义切入点* 这个切入点的名字就是这个方法的名字* 这个方法本身不需要有什么作用* 这个方法的意义就是:给这个 @Pointcut注解一个可以书写的地方* 因为注解只能写在方法、属性、类的上面,并且方法名作为切入点的名字* */	//简单来说就是将查到的方法用myPointCut()方法名代替	@Pointcut("execution(public * com.briup.aop.service..*.*(..))")	public void myPointCut(){	}	//注:这里面的所有方法的JoinPoint类型参数都可以去掉不写,如果确实用不上的话	@Before("myPointCut()")//在myPointCut()中查到的方法之前切入	public void beforeTest(JoinPoint p){		System.out.println(p.getSignature().getName()+" before...");	}	/** @After和@AfterReturning* * @After标注的方法会在切入点上的方法结束后被调用(不管是不是正常的结束).* @AfterReturning标注的方法只会在切入点上的方法正常结束后才被调用.* */	@After("myPointCut()")//在myPointCut()中查到的方法之后切入	public void afterTest(JoinPoint p){		System.out.println(p.getSignature().getName()+" after...");	}	@AfterReturning("myPointCut()")	public void afterReturningTest(JoinPoint p){		System.out.println(p.getSignature().getName()+" afterReturning");	}	@Around("myPointCut()")//在myPointCut()中查到的方法环绕切入	public Object aroundTest(ProceedingJoinPoint pjp)throws Throwable{		System.out.println(pjp.getSignature().getName()+" is start..");		//调用连接点的方法去执行		Object obj = pjp.proceed();		System.out.println(pjp.getSignature().getName()+" is end..");		return obj;	}	//在切入点中的方法执行期间抛出异常的时候,会调用这个 @AfterThrowing注解所标注的方法	@AfterThrowing(value="myPointCut()",throwing="ex")	public void throwingTest(JoinPoint p,Exception ex){		System.out.println(p.getSignature().getName()+" is throwing..."+ex.getMessage());	}}

xml配置:注意给例子中使用的其他的类上面也使用注解

<aop:aspectj-autoproxy/><context:component-scan base-package="com.briup.aop"/><!-- 让Spring扫描注解 --><context:component-scan base-package="com.briup.aop"></context:component-scan><!-- 识别AspectJ的注解 --><aop:aspectj-autoproxy/>

注意:<aop:aspectj-autoproxy proxy-target-class="true"/>这样配置则是强制使用CGLIB进行代理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表