Spring-AOP 引介切面

简介: Spring-AOP 引介切面

概述


之前的博文介绍了 Spring-AOP 通过配置文件实现 引介增强 ,引介切面是引介增强的封装器,通过引介切面可以很容易的为现有对象添加任何接口的实现。


引介切面类继承关系


20170821064821485.jpg


IntroductionAdvisor 和 PointcutAdvisor不同,IntroductionAdvisor 仅有一个类过滤器ClassFilter而没有MethodMatcher,因为引介切面是类级别的,而Poincut的切点是方法级别的。


IntroductionAdvisor接口的两个实现类

20170821065206030.jpg

  • DefaultIntroductionAdvisor
    引介切面最常用的实现类
  • DeclareParentsAdvisor
    用于实现使用AspectJ语言的DeclareParent注解表示的引介切面。


DefaultIntroductionAdvisor的构造函数


20170821065644985.jpg


public DefaultIntroductionAdvisor(Advice advice)


通过一个增强创建的引介切面,引介切面将为目标对象增强对象中所有接口的实现


public DefaultIntroductionAdvisor(Advice advice, IntroductionInfo

introductionInfo)

通过一个增强和一个IntroductionInfo创建引介切面,目标对象小实现哪些接口由introduction对象的getInterfaces()方法标识


public DefaultIntroductionAdvisor(DynamicIntroductionAdvice advice,

Class<?> intf)

通过一个IE增强和一个指定的接口类创建引介切面,仅为目标对象新增intf接口的实现


实例


代码已托管到Github—> https://github.com/yangshangwei/SpringMaster


20170821064539326.jpg


其余代码同 Spring-AOP 通过配置文件实现 引介增强

我们通过DefaultIntroductionAdvisor配置引介切面,更加简洁、清晰

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 目标类 -->
    <bean id="forumServiceTarget" class="com.xgj.aop.spring.advisor.introductionAdvisor.ForumService" />
    <!-- 切面 -->
    <bean id="introductionAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
        <constructor-arg>
            <bean class="com.xgj.aop.spring.advisor.introductionAdvisor.ControllablePerformaceMonitor"/>
        </constructor-arg>
    </bean>
    <!-- 代理类  -->
    <bean id="forumService" class="org.springframework.aop.framework.ProxyFactoryBean"
        p:interceptorNames="introductionAdvisor"
        p:target-ref="forumServiceTarget" 
        p:proxyTargetClass="true" />
</beans>


运行结果:

2017-08-20 19:02:30,492  INFO [main] (AbstractApplicationContext.java:583) - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5f0101fb: startup date [Sun Aug 20 19:02:30 BOT 2017]; root of context hierarchy
2017-08-20 19:02:30,598  INFO [main] (XmlBeanDefinitionReader.java:317) - Loading XML bean definitions from class path resource [com/xgj/aop/spring/advisor/introductionAdvisor/conf-introductionAdvisor.xml]
模拟删除Forum记录:10
模拟删除Topic记录:1022
begin monitor...
模拟删除Forum记录:10
end monitor...
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.removeForum花费7421毫秒。
begin monitor...
模拟删除Topic记录:1022
end monitor...
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.removeTopic花费12468毫秒。


虽然引介切面和其他切面的配置有很大的不同,但却可以采用相似的Spring配置方式配置引介切面。

相关文章
|
SQL 监控 Java
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
这篇文章介绍了如何在IDEA和Spring Boot中使用AOP技术实现日志信息的记录到数据库的详细步骤和代码示例。
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
|
XML Java 数据库连接
Spring高手之路25——深入解析事务管理的切面本质
本篇文章将带你深入解析Spring事务管理的切面本质,通过AOP手动实现 @Transactional 基本功能,并探讨PlatformTransactionManager的设计和事务拦截器TransactionInterceptor的工作原理,结合时序图详细展示事务管理流程,最后引导分析 @Transactional 的代理机制源码,帮助你全面掌握Spring事务管理。
488 2
Spring高手之路25——深入解析事务管理的切面本质
|
Java API 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——Spring Boot 中的 AOP 处理
本文详细讲解了Spring Boot中的AOP(面向切面编程)处理方法。首先介绍如何引入AOP依赖,通过添加`spring-boot-starter-aop`实现。接着阐述了如何定义和实现AOP切面,包括常用注解如`@Aspect`、`@Pointcut`、`@Before`、`@After`、`@AfterReturning`和`@AfterThrowing`的使用场景与示例代码。通过这些注解,可以分别在方法执行前、后、返回时或抛出异常时插入自定义逻辑,从而实现功能增强或日志记录等操作。最后总结了AOP在实际项目中的重要作用,并提供了课程源码下载链接供进一步学习。
1887 0
|
Java 开发者 微服务
微服务——SpringBoot使用归纳——Spring Boot中的切面AOP处理——什么是AOP
本文介绍了Spring Boot中的切面AOP处理。AOP(Aspect Oriented Programming)即面向切面编程,其核心思想是分离关注点。通过AOP,程序可以将与业务逻辑无关的代码(如日志记录、事务管理等)从主要逻辑中抽离,交由专门的“仆人”处理,从而让开发者专注于核心任务。这种机制实现了模块间的灵活组合,使程序结构更加可配置、可扩展。文中以生活化比喻生动阐释了AOP的工作原理及其优势。
667 0
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
缓存 Java 开发者
Spring高手之路22——AOP切面类的封装与解析
本篇文章深入解析了Spring AOP的工作机制,包括Advisor和TargetSource的构建与作用。通过详尽的源码分析和实际案例,帮助开发者全面理解AOP的核心技术,提升在实际项目中的应用能力。
510 0
Spring高手之路22——AOP切面类的封装与解析
|
Java Spring 容器
SpringBoot整合AOP实现打印方法执行时间切面
SpringBoot整合AOP实现打印方法执行时间切面
284 1
|
XML Java 数据库
Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用
这篇文章是Spring5框架的实战教程,详细解释了AOP的关键术语,包括连接点、切入点、通知、切面,并展示了如何使用AspectJ注解来开发AOP实例,包括切入点表达式的编写、增强方法的配置、代理对象的创建和优先级设置,以及如何通过注解方式实现完全的AOP配置。
|
XML Java 数据格式
[Spring实战系列](18)注解切面
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/50659876 使用注解来创建切面是AspectJ 5所引入的关键特性。
1073 0