spring aop的使用,spring aop用法

  spring aop的使用,spring aop用法

  [重点]使用面向切面编程织入需要导入一个依赖包

  依赖项依赖项groupId组织。AspectJ/groupId artifactIdaspectjweaver/artifactId版本1 .9 .9 .1/版本/依赖项/依赖项方式一:使用原生Spring API接口

  配置文件

  ?可扩展标记语言版本=1.0 编码=UTF八号?豆子xmlns= http://www。spring框架。org/schema/beans xmlns : xsi= http://www。w3。org/2001/XML架构实例 xmlns : p= http://www。spring框架。org/schema/p xmlns : c= http://www。spring框架。org/schema/c xmlns : AOP= 3http://www。弹簧框架注册bean-bean id= userService class= com。kero。服务。userserviceimpl /bean id= log class= com。kero。日志。在llog class= com后记录/bean id=。kero。日志。在日志/!-配置面向切面编程(面向方面的编程的缩写)需要导入面向切面编程(面向方面的编程的缩写)的约束- aop:config!-切入点表示表达式表情(要执行的位置)-AOP :切入点id=切入点表达式=执行(* com。kero。服务。userserviceimpl。*(.))/!-执行环绕增加-AOP :顾问建议-ref= log pointcut-ref= pointcut /AOP :顾问建议-ref= after llog pointcut-ref= pointcut //AOP :配置/bean日志

  导入org。spring框架。AOP。方法先于建议;导入Java。郎。反思。方法;公共类日志实现methodbeforadvisory {//方法:要执行的目标对象的方法//objects:参数//target:目标对象@ Override public void before(Method方法,Object[] args,Object target)抛出Throwable { system。出去。println(目标。getclass().getName()的 method.getName()被执行了);} }导入org。spring框架。AOP。afterreturningadvice导入Java。郎。反思。方法;公共类后日志实现AfterReturningAdvice {//方法:要执行的目标对象的方法//objects:参数//target:目标对象//returnValue:返回值@Overri

  de public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("执行了"+ method.getName() + "方法,返回结果为:"+returnValue); }}Service

  

import org.springframework.stereotype.Service;@Servicepublic interface UserService { public void add(); public void delete(); public void update(); public void search();}public class UserServiceImpl implements UserService{ @Override public void add() { } @Override public void delete() { } @Override public void update() { } @Override public void search() { }}

test动态代理 代理的是接口(代理模式是SpringAOP的底层)

 

  

import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //动态代理 代理的是接口 UserService userService = context.getBean("userService", UserService.class); userService.add(); }}

方式二:使用自定义类

 

  配置文件

  

<?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:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:aop="http://www.springframework.org/schema/aop" 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"><!-- 注册bean--> <bean id="userService" class="com.kero.service.UserServiceImpl"/> <bean id="log" class="com.kero.log.Log"/> <bean id="afterlLog" class="com.kero.log.AfterLog"/> <bean id="diy" class="com.kero.diy.DiyPointCut"/> <aop:config><!-- 自定义切面 ref要引用的类--> <aop:aspect ref="diy"><!-- 切入点--> <aop:pointcut id="point" expression="execution(* com.kero.service.UserServiceImpl.*(..))"/><!-- 通知--> <aop:before method="before" pointcut-ref="point"/> <aop:after method="after" pointcut-ref="point"/> </aop:aspect> </aop:config></beans>

DIY类

 

  

public class DiyPointCut { public void before(){ System.out.println("````方法执行前````"); } public void after(){ 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:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" 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 https://www.springframework.org/schema/context/spring-context.xsd"><!-- 注册bean--> <bean id="userService" class="com.kero.service.UserServiceImpl"/> <bean id="log" class="com.kero.log.Log"/> <bean id="afterlLog" class="com.kero.log.AfterLog"/><!-- 开启注解支持--> <aop:aspectj-autoproxy/> <bean id="annotationPointCut" class="com.kero.diy.AnnotationPointCut"/></beans>

自定义类

 

  

import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;//使用注解方式实现AOP@Aspect//标注这个类是一个切面public class AnnotationPointCut { @Before("execution(* com.kero.service.UserServiceImpl.*(..))") public void before(){ System.out.println("````方法执行前````"); } @After("execution(* com.kero.service.UserServiceImpl.*(..))") public void after(){ System.out.println("````方法执行后````"); }}

其他不变

 

  补充知识:execution表达式

  execution表达式的详解

  切入点表达式:execution(* 包名.*.*(..))

  整个表达式可以分为五个部分:

  1、execution(): 表达式主体。

  2、第一个*号:方法返回类型, *号表示所有的类型。

  3、包名:表示需要拦截的包名。

  4、第二个*号:表示类名,*号表示所有的类。

  5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面( )里面表示方法的参数,两个句点表示任何参数

  其中除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。

  举例:

  

execution(public * *(..)) 匹配所有的public修饰符的方法

 

  execution(* set*(..)) 匹配所有set开头的方法:

  execution(* com.kero.service.UserServiceImpl.*(..))) 匹配UserServiceImpl接口/类的所有方法:

  

到此这篇关于Spring深入讲解实现AOP的三种方式的文章就介绍到这了,更多相关Spring AOP内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • spring编程式事务处理,spring编程事务
  • spring编程式事务处理,spring编程事务,详解Spring学习之编程式事务管理
  • spring的核心功能模块有几个,列举一些重要的spring模块
  • spring的核心功能模块有几个,列举一些重要的spring模块,七个Spring核心模块详解
  • spring注解和springmvc的注解,SpringMVC常用注解
  • spring注解和springmvc的注解,SpringMVC常用注解,详解springmvc常用5种注解
  • spring实现ioc的四种方法,spring的ioc的三种实现方式
  • spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况
  • spring事务失效问题分析及解决方案怎么做,spring 事务失效情况,Spring事务失效问题分析及解决方案
  • spring5.0新特性,spring4新特性
  • spring5.0新特性,spring4新特性,spring5新特性全面介绍
  • spring ioc以及aop原理,springmvc aop原理
  • spring ioc以及aop原理,springmvc aop原理,深入浅析Spring 的aop实现原理
  • Spring cloud网关,spring cloud zuul作用
  • 留言与评论(共有 条评论)
       
    验证码: