千家信息网

Spring AOP基本概念是什么

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,本篇内容介绍了"Spring AOP基本概念是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么
千家信息网最后更新 2024年11月28日Spring AOP基本概念是什么

本篇内容介绍了"Spring AOP基本概念是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  什么是AOP

  AOP即面向切面编程。

  面向切面--Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的--完成业务逻辑--仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

  AOP中的基本概念

  通知(Adivce)

  通知有5种类型:

  Before:在方法被调用之前调用

  After:在方法完成后调用通知,无论方法是否执行成功

  After-returning:在方法成功执行之后调用通知

  After-throwing:在方法抛出异常后调用通知

  Around:通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为

  切点(Pointcut)

  切点在Spring AOP中是对应系统中的方法。但是这个方法是定义在切面中的方法,一般和通知一起使用,一起组成了切面。

  连接点(Join point)

  比如:方法调用、方法执行、字段设置/获取、异常处理执行、类初始化、甚至是 for 循环中的某个点

  理论上, 程序执行过程中的任何时点都可以作为作为织入点, 而所有这些执行时点都是 Joint point

  但 Spring AOP 目前仅支持方法执行 (method execution),也可以这样理解,连接点就是你准备在系统中执行切点和切入通知的地方(一般是一个方法,一个字段)

  切面(Aspect)

  切面是切点和通知的集合,一般单独作为一个类。通知和切点共同定义了关于切面的全部内容,它是什么时候,在何时和何处完成功能。

  引入(Introduction)

  引用允许我们向现有的类添加新的方法或者属性

  织入(Weaving)

  组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

  Spring中对AOP的支持

  首先AOP思想的实现一般都是基于代理模式,在JAVA中一般采用JDK动态代理模式,但是我们都知道,JDK动态代理模式只能代理接口,如果要代理类那么就不行了。因此,Spring AOP 会这样子来进行切换,因为Spring AOP 同时支持 CGLIB、ASPECTJ、JDK动态代理,当你的真实对象有实现接口时,Spring AOP会默认采用JDK动态代理,否则采用cglib代理。

  如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;

  如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类--不过这个选择过程对开发者完全透明、开发者也无需关心。

  代码示例

  定义主题接口,这些接口的方法可以成为我们的连接点

  package wokao666.club.aop.spring01;

  public interface Subject {

  //登陆

  public void login();

  //下载

  public void download();

  }

  定义实现类,这是代理模式中真正的被代理人(如果你有参与代购,这个就像你在代购中的角色)

  package wokao666.club.aop.spring01;

  public class SubjectImpl implements Subject {

  public void login() {

  System.err.println("借书中...");

  }

  public void download() {

  System.err.println("下载中...");

  }

  }

  定义切面(切面中有切点和通知)

  package wokao666.club.aop.spring01;

  public class PermissionVerification {

  /**

  * 权限校验

  * @param args 登陆参数

  */

  public void canLogin() {

  //做一些登陆校验

  System.err.println("我正在校验啦!!!!");

  }

  /**无锡妇科检查医院 http://www.87554006.com/

  * 校验之后做一些处理(无论是否成功都做处理)

  * @param args 权限校验参数

  */

  public void saveMessage() {

  //做一些后置处理

  System.err.println("我正在处理啦!!!!");

  }

  }

  SpringAOP.xml文件

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:aop="http://www.springframework.org/schema/aop"

  xmlns:tx="http://www.springframework.org/schema/tx"

  xsi:schemaLocation="http://www.springframework.org/schema/beans

  http://www.springframework.org/schema/beans/spring-beans-4.2.xsd

  http://www.springframework.org/schema/aop

  http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

  测试类和结果

  package wokao666.club.aop.spring01;

  import org.springframework.context.ApplicationContext;

  import org.springframework.context.support.ClassPathXmlApplicationContext;

  public class Test {

  public static void main(String[] args) {

  ApplicationContext ctx =

  new ClassPathXmlApplicationContext("SpringAOP.xml");

  Subject subject1 = (Subject)ctx.getBean("SubjectImpl1");

  Subject subject2 = (Subject)ctx.getBean("SubjectImpl2");

  subject1.login();

  subject1.download();

  System.err.println("==================");

  subject1.login();

  subject1.download();

  }

  }

"Spring AOP基本概念是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0