java_spring_AOP实现方式三(使用注解)

本文介绍使用Spring AOP注解实现切面编程的方法,包括@Aspect声明切面类、@Before前置通知、@After最终通知及@Around环绕通知等,并提供了一个具体的环绕通知示例。

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

前面提到的方式二的配置内容如下:

<!-- 切面方法二 -->

<bean id="writeLog2" class="com.gary.aop.writeLog2"></bean>

<aop:config>

<aop:aspect ref="writeLog2">

<aop:pointcut expression="execution(* com.glodon.service.*.*(..))" id="ddd"/>

<aop:before method="before" pointcut-ref="ddd"/>

<aop:after method="after" pointcut-ref="ddd"/>

</aop:aspect>

</aop:config>

它有三块内容:

1.配置切面类的bean

2.配置切入点

3.绑定通知

三块内容都可以通过注解搞定,新创建一个切面类:

@Aspect

@Component

public class writeLog3 {

@Before("execution(* com.glodon.service.*.*(..))")

public void before(){

System.out.println("--方法执行前执行--");

}

@After("execution(* com.glodon.service.*.*(..))")

public void after(){

System.out.println("----方法执行后执行----");

}

}

在spring配置文件中配置扫描此文件。

<!-- 切面方法三 注解-->

<context:component-scan base-package="com.gary.aop"></context:component-scan>

需要添加一行配置开启aop注解扫描

<!-- 开启aop的注解扫描 -->

<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

测试,输出:

--方法执行前执行--

--func1--

----方法执行后执行----

--方法执行前执行--

--func2--

----方法执行后执行----

--方法执行前执行--

--func3--

----方法执行后执行----

 

Spring AOP相关注解及含义如下:

@Aspect:用于声明方面组件

@Before:用于声明前置通知

@AfterReturning:用于声明后置通知

@After:用于声明最终通知

@Around:用于声明环绕通知

@AfterThrowing:用于声明异常通知

 

演示个环绕通知:

@Around("execution(* com.glodon.service.*.*(..))")

public void around(ProceedingJoinPoint jp){

String className = jp.getTarget().getClass().getName();

String methodName = jp.getSignature().getName();

System.out.println(className+""+methodName+"方法--环绕前");

try {

jp.proceed();// 调用方法,不执行的话方法将不会被执行

} catch (Throwable e) {

e.printStackTrace();

}

System.out.println(className+""+methodName+"方法--环绕后");

}

调用方法的地方屏蔽两个,方便查看效果

@RequestMapping("testAOP")

public String testAOP(){

//userService.func1();

//userService.func2();

userService.func3(3);

return "success";

}

运行输出:

com.glodon.service.UserServicefunc3方法--环绕前

--方法执行前执行--

--func3--

com.glodon.service.UserServicefunc3方法--环绕后

----方法执行后执行----

 

如果屏蔽jp.proceed(),业务方法将不会被执行

// jp.proceed();

com.glodon.service.UserServicefunc3方法--环绕前

com.glodon.service.UserServicefunc3方法--环绕后

----方法执行后执行----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值