小蔡学Java

Spring知识点总结五

2023-12-23 20:33 749 0 SSM / SpringBoot 框架篇 Spring

10、AOP注解方式的实现

注解方式实现AOP

1.导入依赖包

	<!-- spring切面包 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aspects</artifactId>
		<version>5.3.5</version>
	</dependency>
	<!--aop联盟包-->
	<dependency>
		<groupId>aopalliance</groupId>
		<artifactId>aopalliance</artifactId>
		<version>1.0</version>
	</dependency>

2.通过@Aspect注解声明切面

	@Aspect
	@Component
	//如果有多个增强类对同一方法进行增强,可以通过此注解设置优先级
	//数字越小,代理位置越靠近注入位置,优先级越高
	@Order(1)
	public class DaoAspect {

		//定义一个公共切点,可以指向方法或者接口
		@Pointcut("execution(* com.mdh.mvc.dao.UserDao.add(..))")
		public void addPointCut(){}

		@Before("addPointCut()")
		public void methodBefore(JoinPoint joinPoint){
			//可以获取方法执行的参数
			Object[] args = joinPoint.getArgs();
			System.out.println(Arrays.toString(args));
		}

		@After("addPointCut()")
		public void methodAfter(JoinPoint joinPoint){

		}

		@AfterReturning(value = "addPointCut()",returning = "res")
		public void methodAfterReturning(JoinPoint joinPoint,Object res){
			//可以接收方法的返回值
			System.out.println(res);
		}

		@AfterThrowing(value = "addPointCut()",throwing = "e")
		public void methodAfterThrowing(Exception e){
			//可以获取异常信息
			System.out.println(e.getMessage());
	 }

		@Around("addPointCut()")
		public Object methodAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
			//切点方法在这里执行
			Object res = proceedingJoinPoint.proceed();
			return res;
		}
	}

JoinPoint对象

JoinPoint对象封装了SpringAOP中切面方法的信息

ProceedingJoinPoint对象

是对象JoinPoint的子接口,只用于@Around的切面方法中,添加了两个方法 Object proceed();执行目标方法 Object proceed(Object[] varl);传入的新的参数去执行目标方法

通过配置类

	//声明是一个配置类
	@Configuration
	//要扫描的包
	@ComponentScan("com.mdh")
	//是否自动生成切面代理对象
	@EnableAspectJAutoProxy(proxyTargetClass = true)
	public class SpringConfig{

	}

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录