Spring框架技术实战②——Spring核心概念之AOP

本文深入探讨了如何使用SpringAOP进行日志输出,详细讲解了五种增强处理类型,并介绍了两种简化SpringAOP配置的方法,包括使用schema和annotation,帮助开发者更高效地进行日志管理和配置。

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

目录

1、使用Spring AOP 实现日志输出

1、AOP概念

2、使用Spring AOP 实现日志输出

3、增强处理类型

1、前置增强处理

2、后置增强处理

3、异常增强处理

4、最终增强处理

5、环绕增强处理

2、简化Spring 的 AOP配置

1、通过使用 schema 形式实现简化 AOP 配置

2、通过使用 annotation 实现简化 AOP 配置

1、准备工作

2、使用 @AspectJ 注解实现切面

3、使用 @AspectJ 注解定义其他增强类型


1、使用Spring AOP 实现日志输出

1、AOP概念

2、使用Spring AOP 实现日志输出

 3、增强处理类型

1、前置增强处理

	public void before(JoinPoint jp) {
		System.out.println("前置通知:"+jp.getSignature().getName()+":方法执行之前...");
		System.out.println("连接点对象"+jp.getTarget().getClass().getSimpleName());
		System.out.println("连接点方法"+jp.getSignature());
		System.out.println("连接点方法参数"+jp.getArgs());
	}

2、后置增强处理

	public void afterReturn(JoinPoint jp,Object obj) {
		System.out.println("返回通知:"+jp.getSignature().getName()+":方法正确执行之后获取的返回值为:"+obj);
	}

 3、异常增强处理

	public void afterThrow(JoinPoint jp,Exception e) {
		if(e instanceof ArithmeticException) {
			System.out.println("发生了算数异常,我们要这样处理.....");
		}
		System.out.println("异常通知:"+jp.getSignature().getName()+":方法发生的异常为:"+e);
	}

 4、最终增强处理

	public void after(JoinPoint jp) {
		System.out.println("后置通知:"+jp.getSignature().getName()+":方法执行之后...");
	}

 5、环绕增强处理

	public Object myAround(ProceedingJoinPoint pjp) {
		Object obj=null;
		System.out.println("环绕通知方法前");
		//如果该方法执行,代表执行目标方法
		try {
			obj=pjp.proceed();
			obj=30;
		} catch (Throwable e) {
			e.printStackTrace();
		}
		System.out.println("环绕通知中获取方法返回值:"+obj);
		System.out.println("环绕通知方法后");
		return obj;
	}

2、简化Spring 的 AOP配置

简化Spring的AOP配置通常情况下有两种方式:

①通过使用schema形式简化AOP配置

②通过使用annotation形式简化AOP配置

1、通过使用 schema 形式实现简化 AOP 配置

关键步骤:

①编写业务类,放入IOC容器

②编写切面类,放入IOC容器

③编写配置文件实现AOP,关键代码如下:

	<!-- 此处省略业务类的bean代码 -->

	<!-- 声明切面类 -->
	<bean id="myAspect" class="com.zl.aspect.MyAspect"></bean>

	<!-- 配置指定切入的对象 -->
	<aop:config>
		<!-- 配置切点表达式 -->
		<aop:pointcut expression="execution(* com.zl.service..*.*(..))"
			id="pointCut1" />
		<aop:pointcut expression="execution(* com.zl.service..*.*User(..))"
			id="pointCut2" />
		<!-- 配置切面对象 -->
		<aop:aspect ref="myAspect">
			<aop:after method="after" pointcut-ref="pointCut1" />
			<aop:before method="before" pointcut-ref="pointCut2" />
		</aop:aspect>
	</aop:config>

2、通过使用 annotation 实现简化 AOP 配置

1、准备工作

2、使用 @AspectJ 注解实现切面

@Component
@Aspect
public class MyAspect {
	/*
	 * 前置通知:方法执行之前执行
	 */
	@Before("execution(* com.zl.service..*.*(..))")
	public void before(JoinPoint jp) {
		System.out.println("前置通知:" + jp.getSignature().getName() + ":方法执行之前...");
	}

}

 

 3、使用 @AspectJ 注解定义其他增强类型

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值