Spring之AOP:我行之我见(基于Annotation和XML)

本文介绍如何使用Spring AOP实现各种通知类型,包括前置、后置、最终及异常通知等,并展示了如何通过环绕通知进行方法调用前后的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你看了上一篇文章,你会发现Spring本身做的多好,不用我们在写神马代理类,一切都给我们定义好了
//@Aspect
public class AopInterceptor
{
	//@Pointcut("execution(public * com.jzh.daoimp.*.*(..))")
	public void anyMethod()
	{
		System.out.println("声明一个切入点");
	}
	//@Before("anyMethod()&&args(username)")
    public void doAccessCheck()
    {
		System.out.println("定义前置通知...");
    }
	//@AfterReturning(pointcut="anyMethod()",returning="relvalue")
	public void doAfterReturning(){ 
		System.out.println("定义后置通知...");
	} 
	//@After("anyMethod()")
	public void doAfter(){ 
		System.out.println("定义最终通知...");
	} 
	//@AfterThrowing(pointcut="anyMethod()",throwing="e")//定义异常通知(当所拦截的方法出现异常时) 
	public void doAfterThrowing(){ 
		System.out.println("定义异常通知...");
	} 

	//@Around("anyMethod()")//定义环绕通知 
	public Object doBasicProfiing(ProceedingJoinPoint pjp) throws Throwable{ 
	//if(){//判断用户是否有权限 
	System.out.print("进入方法"); 
	Object result = pjp.proceed(); //此方法是必须 
	System.out.println("退出方法"); 
	//} 
	return result;
	} 
	/*//@Pointcut("execution(public * com.jzh.daoimp.*.*(..))")
	public void anyMethod()
	{
		System.out.println("声明一个切入点");
	}
	//@Before("anyMethod()&&args(username)")
    public void doAccessCheck(String username)
    {
		System.out.println("定义前置通知...并传参数"+username);
    }
	//@AfterReturning(pointcut="anyMethod()",returning="relvalue")
	public void doAfterReturning(String relvalue){ 
		System.out.println("定义后置通知...执行返回String类型的方法"+relvalue);
	} 
	//@After("anyMethod()")
	public void doAfter(){ 
		System.out.println("定义最终通知");
	} 
	//@AfterThrowing(pointcut="anyMethod()",throwing="e")//定义异常通知(当所拦截的方法出现异常时) 
	public void doAfterThrowing(Exception e){ 
	} 

	//@Around("anyMethod()")//定义环绕通知 
	public Object doBasicProfiing(ProceedingJoinPoint pjp) throws Throwable{ 
	//if(){//判断用户是否有权限 
	System.out.print("进入方法"); 
	Object result = pjp.proceed(); //此方法是必须 
	System.out.println("退出方法"); 
	//} 
	return result;
	} */





}
如果你想用注解只需要把<!-- <aop:aspectj-autoproxy/>-->打开,其他aop标签注释掉。
    <context:annotation-config/>
    <context:component-scan base-package="com.jzh"/>
  <!--    <aop:aspectj-autoproxy/>-->
	 <bean id="aop" class="com.jzh.aop.AopInterceptor"></bean>
	 <bean id="userDao" class="com.jzh.daoimp.UserDaoImp"></bean>
	 <aop:config>
	 	<aop:aspect id="aopInterceptor" ref="aop">
	 		<aop:pointcut expression="execution(public * com.jzh.daoimp.*.*(..))"  id="mycut"/>
	 		<aop:before method="doAccessCheck" pointcut-ref="mycut"  />
	 		<aop:after-returning method="doAfterReturning" pointcut-ref="mycut"/>
	 		<aop:after method="doAfter" pointcut-ref="mycut"/>
	 		<aop:after-throwing method="doAfterThrowing" pointcut-ref="mycut"/>
	 		<aop:around method="doBasicProfiing" pointcut-ref="mycut"/>
	 	</aop:aspect>
	 </aop:config>
</beans>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值