Spring Aop xml实现

2022-07-07 12:16:31

导宝

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
    </dependency>

第一种方式

接口

publicinterfaceUserService{voidadd();voiddelete();voidupdate();voidselect();}

实现类

publicclassUserServiceImplimplementsUserService{@Overridepublicvoidadd(){System.out.println("增加一个用户");}@Overridepublicvoiddelete(){System.out.println("删除一个用户");}@Overridepublicvoidupdate(){System.out.println("修改一个用户");}@Overridepublicvoidselect(){System.out.println("查询一个用户");}}

日志插入类

publicclassAfterLogimplementsAfterReturningAdvice{@OverridepublicvoidafterReturning(Object returnValue,Method method,Object[] args,Object target)throwsThrowable{System.out.println("执行了"+ method.getName()+"方法,返回的结果为"+ returnValue);}}publicclassLogimplementsMethodBeforeAdvice{//method:执行的目标对象的方法//args: 参数//target: 目标对象@Overridepublicvoidbefore(Method method,Object[] args,Object target)throwsThrowable{System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");}}

xml文件

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd"><beanid="userservice"class="com.gmy.service.UserServiceImpl"></bean><beanid="log"class="com.gmy.log.Log"></bean><beanid="afterlog"class="com.gmy.log.AfterLog"></bean><!--    方式一:使用原生Spring API接口--><!--    配置aop:需要导入aop的约束--><aop:config><!--        切入点   expression(要执行的位置)--><aop:pointcutid="pointcut"expression="execution(* com.gmy.service.UserServiceImpl.*(..))"/><!--        执行环绕增加--><aop:advisoradvice-ref="log"pointcut-ref="pointcut"></aop:advisor><aop:advisoradvice-ref="afterlog"pointcut-ref="pointcut"></aop:advisor></aop:config></beans>

测试类

publicclassMyTest{@Testpublicvoidtest1(){ApplicationContext context=newClassPathXmlApplicationContext("applicationContext.xml");//动态代理的是接口//UserServiceImpl user = (UserServiceImpl) context.getBean("userservice");UserService user= context.getBean(UserService.class);

        user.delete();}}

方式二:

插入类

publicclassDiypoincut{publicvoidbefore(){System.out.println("插入前");}publicvoidafter(){System.out.println("插入后");}}
       方式二:自定义类<beanid="diy"class="com.gmy.diy.Diypoincut"></bean><aop:config><!--        自定义切面  ref 要引用的类--><aop:aspectref="diy"><!--        切入点--><aop:pointcutid="point"expression="execution(* com.gmy.service.UserServiceImpl.*(..))"/><!--            通知--><aop:beforemethod="before"pointcut-ref="point"></aop:before><aop:aftermethod="after"pointcut-ref="point"></aop:after></aop:aspect></aop:config>

方式三:

@Aspect//标注这个类是一个切面publicclassAnnotationPoinCut{@Before("execution(* com.gmy.service.UserServiceImpl.*(..))")publicvoidbefore(){System.out.println("方法执行前");}@Around("execution(* com.gmy.service.UserServiceImpl.*(..))")publicvoidaround(ProceedingJoinPoint jp)throwsThrowable{System.out.println("环绕前");//执行方法Object proceed= jp.proceed();System.out.println("环绕后");//System.out.println(proceed);//Signature signature = jp.getSignature();//获得签名//System.out.println("signature:" + signature);}}
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd"><beanid="userservice"class="com.gmy.service.UserServiceImpl"></bean><beanid="log"class="com.gmy.log.Log"></bean><beanid="afterlog"class="com.gmy.log.AfterLog"></bean><beanid="annotationpoinCut"class="com.gmy.diy.AnnotationPoinCut"></bean><!--    注解支持--><aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  • 作者:owlpant
  • 原文链接:https://blog.csdn.net/qq_49123068/article/details/124631988
    更新时间:2022-07-07 12:16:31