spring aop aspectj 基于注解
2020-01-12 18:04
225 查看
aop 好像都需要目标类有接口类具体什么原理我不太清楚,
程序结构如下
目标类实现类如下:
package com.qst.d_aspect_anno; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @Service("userServerImplId") public class UserServerImpl implements UserService { @Override public void addUser() { System.out.println("com.qst.c_aspect_xml UserServer addUser"); } @Override public String updateUser() { System.out.println("com.qst.c_aspect_xml UserServer updateUser"); return "返回值"; } @Override public void deleteUser() { System.out.println("com.qst.c_aspect_xml UserServer deleteUser"); } }
切面类如下:
package com.qst.d_aspect_anno; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /* * 切面类有多个通知 */ @Component @Aspect public class MyAspect { @Before("execution(* com.qst.d_aspect_anno.UserServerImpl.*(..))") public void myBefore(JoinPoint joinPoint) { System.out.println("前置通知"+joinPoint.getSignature().getName()); } <!--声明公共切入点 <aop:pointcut expression="execution(* com.itheima.d_aspect.b_anno.UserServiceImpl.*(..))" id="myPointCut"/> 下面方法替代了上面的bean声明 myPointCut就相当于上面的id --> @Pointcut("execution(* com.qst.d_aspect_anno.UserServerImpl.*(..))") private void myPointCut() { } @AfterReturning(value="myPointCut()",returning="ret") public void myAfterReturning(JoinPoint joinPoint,Object ret) { System.out.println("后置通知"+joinPoint.getSignature().getName()+"---->"+ret); } @Around(value="myPointCut()") public Object myAround(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("前置环绕"); //手动执行目标方法 Object obj = joinPoint.proceed(); System.out.println("后置环绕"); return obj; } //必须有参数 @AfterThrowing(value="myPointCut()",throwing="e") public void myAfterThrowing(JoinPoint joinPoint,Throwable e) { System.out.println("抛出异常"+e.getLocalizedMessage()); } @After("myPointCut()") public void myAfter() { System.out.println("最终通知"); } }
配置文件
<?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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 扫描类 --> <context:component-scan base-package="com.qst.d_aspect_anno"></context:component-scan> <!-- 扫描aop注解 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
测试类
package com.qst.d_aspect_anno; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { String xmlPath = "com/qst/d_aspect_anno/applicationcontext.xml"; ApplicationContext application = new ClassPathXmlApplicationContext(xmlPath); UserService userService = (UserService) application.getBean("userServerImplId"); userService.addUser(); userService.deleteUser(); userService.updateUser(); } }
每一个注解都替代了xml的一部分应用
着重学习execution(* com.qst.d_aspect_anno.UserServerImpl.*(…)) 切入点的定位
用法下面连接也有
xml实现连接如下(https://blog.csdn.net/qq_42603651/article/details/98231336)
可以对比查看
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Spring基于注解@AspectJ的AOP
- Spring Aop(二)——基于Aspectj注解的Aop简单实现
- Spring基于注解@AspectJ的AOP
- spring之基于aspectj注解aop使用
- Spring Aop(四)——基于Aspectj注解的Advice介绍
- Intellij IDEA创建Spring项目之基于Aspectj的AOP操作(注解方式)
- Spring学习-21:Spring的AOP:基于AspectJ的注解开发
- day3_Spring_02_基于aspectj的注解aop操作
- Spring的AspectJ的AOP,基于注解(9)重点掌握
- Spring AOP使用配置介绍(四):基于@AspectJ注解的aop
- Spring AOP 基于注解的声明式Aspectj
- SpringAOP入门学习一:基于注解配置切面( AspectJ)
- Spring AOP使用配置介绍(四):基于@AspectJ注解的aop
- Spring(十二)AspectJ框架开发AOP(基于注解)
- SSM搭建-Spring AOP之基于注解的声明式AspectJ(9)
- Spring AOP面向切面编程详解(基于XML方式 注解方式 注入Aspectj方式)
- Spring Aop开发基于AspectJ注解方式的案例
- Spring-AOP:基于AspectJ注解的AOP
- Spring AOP的使用 基于全注解AspectJ
- Spring AOP的基于AspectJ注解开发