首页 > 编程语言 >Mybatis面向切面编程(AOP)的applicationContext配置文件

Mybatis面向切面编程(AOP)的applicationContext配置文件

时间:2023-03-30 15:02:38浏览次数:42  
标签:applicationContext 配置文件 void joinPoint System AOP println public out


面向切面编程(AOP)

applicationContext.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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	复制修改
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    ">


	<aop:config>
		<!-- 切入点配置  expression:表达式     execution:执行     id用于下面增强ref引用-->
		<aop:pointcut expression="(execution(public void show())"
			id="show" />
		<!-- 切入面配置 -->
		<!-- ref是增强类的对象名(小写开头) -->
		<aop:aspect ref="zengQiang">
			<!-- method是增强的对象的方法名      pointcut-ref的值和 切入配置的id值相同 -->

			<!-- 前置增强 -->
			<aop:before method="qianZhi" pointcut-ref="show" />

			<!-- 后置增强  returning:返回值(必须和方法的形参相同)    在后置增强方法里面能获取返回值    出现异常不会执行后置增强的方法
			-->
			<aop:after-returning method="houZhi"
				pointcut-ref="show" returning="result" />

			<!-- 异常增强 只能捕获运行时的异常   throwing 返回异常的对象  -->
			<aop:after-throwing method="yiChang" pointcut-ref="show" throwing="e"/>

			<!-- 最终增强 有异常也会执行最终增强的方法 -->
			<aop:after method="zuiZhong" pointcut-ref="show" />

			<!-- 环绕增强  包含了以上所有增强 只能单独使用-->
			<aop:around method="huanRao" pointcut-ref="show" />

		</aop:aspect>
	</aop:config>
</beans>

增强类里的方法

package aopDemo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;

/**
 * 增强类
 */
@Component
public class ZengQiang {
	/**
	 * 
	 * @param joinPoint
	 *            切入点:被增强的对象
	 */
	public void qianZhi(JoinPoint joinPoint) {
		// 获取被增强的对象的名称
		joinPoint.getTarget();
		// 获取形参
		joinPoint.getArgs();
		// 获取方法的全称
		joinPoint.getSignature();
		System.out.println("前置增强");
	}

	public void houZhi(JoinPoint joinPoint,Object result) {
		System.out.println("后置增强");
	}

	public void yiChang(RuntimeException e) {
		System.out.println("异常增强");
		// 打印出异常堆栈
		e.printStackTrace();
	}

	public void zuiZhong() {
		System.out.println("最终增强");
	}

	/**
	 * 
	 * @param pjp
	 *            正在运行的切入点
	 */
	public void huanRao(ProceedingJoinPoint pjp) {
		System.out.println("前置");
		try {
			// 相当于调用运行被切入的方法
			pjp.proceed();
			System.out.println("后置");
		} catch (Throwable e) {
			System.out.println("异常");
			e.printStackTrace();
		} finally {
			System.out.println("最终增强");
		}
	}
}

切入点expression=“execution(方法)” 属性值

public * addNewUser(entity.User): “*”表示匹配所有类型的返回值。
public void *(entity.User): “*”表示匹配所有方法名。
public void addNewUser(..): “..”表示匹配所有参数个数和类型。
* com.service.*.*(..):匹配com.service包下所有类的所有方法。
* com.service..*.*(..):匹配com.service包及其子包下所有类的所有方法

AOP注解方式

applicationContext.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    ">

	<!-- 自动注解扫描设置 -->
	<context:component-scan base-package="aopDemo" />

	<!-- 启动AOP自动代理 -->
	<aop:aspectj-autoproxy />

</beans>

增强类 切入点注解写入增强类

@Component
// 切入点 ASpect 
@Aspect
public class ZengQiang {

	//定义通用切入点
	@Pointcut("execution(* *.*(..))")
	public void pointcut() {
	}

	/**
	 * @param joinPoint
	 *        切入点:被增强的对象
	 */
	@Before("pointcut()")
	public void qianZhi(JoinPoint joinPoint) {
		System.out.println("前置增强");
	}

	@AfterReturning(pointcut = "pointcut()", returning = "result")
public void houZhi(JoinPoint joinPoint, Object result) {
		System.out.println("后置增强");
	}

	@AfterThrowing(pointcut = "pointcut()", throwing = "e")
	public void yiChang(RuntimeException e) {
		System.out.println("异常增强");
		// 打印出异常堆栈
		e.printStackTrace();
	}

	@After("pointcut()")
	public void zuiZhong() {
		System.out.println("最终增强");
	}

	/**
	 * @param pjp
	 *        正在运行的切入点
	 */
	// @Around("pointcut()")   环绕增强
	public void huanRao(ProceedingJoinPoint pjp) {

	}
}


标签:applicationContext,配置文件,void,joinPoint,System,AOP,println,public,out
From: https://blog.51cto.com/loveddz/6159590

相关文章

  • spring-MVC web.xml springmvc-servlet.xml 配置文件
    springMVC配置文件web.xml<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns......
  • SpringMVC整合的 spring-mvc spring-mybatis配置文件
    SpringMVC入门spring-mvc.xml配置文件<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.......
  • Aop面向方面编程之PostSharp框架
    官网:https://www.postsharp.net/aop.net/msil-injection向切面编程的概念已经盛行很久了,可以很好的将我们代码的各个关注方面分离开来.比如:事务,日志,异常处理,数......
  • 数据开发【配置文件】和【传参】规范
    概述配置文件概念:一种计算机文件,可给计算机程序配置参数和初始设置场景:软件开发时,生产环境数据库账号密码应写到配置文件,不应明文写到代码中常见的配置文......
  • Spring Aop 常见注解和执行顺序
    SpringAop常见注解和执行顺序IOC、AOP、Bean注入、Bean的生命周期、Bean的循环依赖首先我们一起来回顾一下SpringAop中常用的几个注解:@Before 前置通知:目......
  • Spring、SpringBoot基于内存的异步调用ApplicationContext.publishEvent (生产、消费)
     ApplicationContext.publishEvent是Spring提供的解耦的一种方式(基于内存)。同样可以使用MQ组件/线程池代替。 参数类NotifyEvent.javaimportlombok.AllA......
  • SpringBoot 整合AOP(面向切面编程)其中@Around失效问题
    1.AOP实现知识点​核心思想:动态代理。​支持技术:反射。2.官方文档名词解释​Aspect(切面):关注点的模块化(新增业务的模块化)。为完成新业务而编写的类对象。(带@Aspect注解......
  • Aop原理
    AOP相关的概念1)Aspect:切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面。2)Joinpoint:连接点,也就是可以进行横向切入的位置。3)Advice:通知,切面在某个......
  • Spring AOP、AspectJ、CGLIB
     静态代理和动态代理AOP代理则可分为静态代理和动态代理两大类,其中静态代理是指使用AOP框架提供的命令进行编译,从而在编译阶段就可生成AOP代理类,因此也称为编译时......
  • 第九篇:Spring源码-AOP分析
    Spring源码-AOP分析一、手写AOP回顾  本文我们开始讲解Spring中的AOP原理和源码,我们前面手写了AOP的实现,了解和自己实现AOP应该要具备的内容,我们先回顾下,这对我们理解Spri......