适配器的简单应用实现:

  比如:有一个类Car,在类中有两个属性一个为汽车名name,另一个为速度speed。其行为为run()。

     现在有一辆车BMWCar 增加了GPS功能。如下实现:

      基本类:

      public class Car{

        private String name;

        private double speed;

        public void run()

      }

      新增功能:

      public interface GPS{}

      实现继承基本类,再实现新增接口:

      public class BMWCar extends Car implements GPS{}

利用Spring-AOP实现:

   package com.springaop.test; 

    public interface Car{

      public void run();

    }

    public class BMWCar implements Car{

      public void run(){}

    }

    //新增功能

    public interface GPS{

      public void gpsLocation();

    }

    public class GPSCar implements GPS{

      public void gpsLocation(){}

    }

通过配置AOP,实现两种功能的耦合:

<beans>
  <bean id="car" class="com.springaop.test.Car"/>
  <bean id="bmwcr" class="com.springaop.test.BMWCar"/>

  <aop:config proxy-target-class="true">
    <aop:aspect>
      <aop:declare-parents

        <!--- types-mathcing是之前原始的类 ->
        types-matching="com.springaop.test.Car"

        <!---implement-interface是想要添加的功能的接口 -->
        implement-interface="com.springaop.test.GPS"

        <!-- default-impl是新功能的默认的实现-->
        default-impl="com.springaop.test.GPSCar"/>
    </aop:aspect>
  </aop:config>
</beans>

测试:

  Car car = (Car)ctx.getBean("car");
  car.run();

  GPS gps = (GPS)ctx.getBean("car");

  gps.gpsLocation();

Spring-AOP为类增加新的功能的更多相关文章

  1. Spring aop:decare-parent 为类增加新的方法

    Spring aop:decare-parent 为类增加新的方法: 使用XML配置的方式: XML: <?xml version="1.0" encoding=" ...

  2. 我使用Spring AOP实现了用户操作日志功能

    我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下. 需求分析 系统需要对用户的操作进行记录,方便未来溯源 首先想到的就是在每个 ...

  3. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-010-Introduction为类增加新方法@DeclareParents、<aop:declare-parents>

    一. 1.Introduction的作用是给类动态的增加方法 When Spring discovers a bean annotated with @Aspect , it will automat ...

  4. 【Spring实战】—— 11 通过AOP为特定的类引入新的功能

    如果有这样一个需求,为一个已知的API添加一个新的功能. 由于是已知的API,我们不能修改其类,只能通过外部包装.但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义 ...

  5. 利用Spring AOP和自定义注解实现日志功能

    Spring AOP的主要功能相信大家都知道,日志记录.权限校验等等. 用法就是定义一个切入点(Pointcut),定义一个通知(Advice),然后设置通知在该切入点上执行的方式(前置.后置.环绕等 ...

  6. Spring AOP 代理类,BeanNameAutoProxyCreator cglib

    BeanNameAutoProxyCreator支持拦截接口和类,但不支持已经被jdk代理过的类$Proxy8.使用cglib才能代理,如下 <!-- 通过bean的名字来匹配选择要代理的bea ...

  7. Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理

    1.概要 aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理) 切面:实现的交叉功能. 通知:切面的实际实现(通知要做什么,怎么做). 连接点:应用程序执行过程期间,可以插入切面的地点. ...

  8. Spring AOP 实现原理与 CGLIB 应用

    https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/ AOP(Aspect Orient Programming),也就是面向 ...

  9. Spring AOP 实现原理与 CGLIB 应用--转

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...

随机推荐

  1. Kubernetes弃用Docker后怎么办?

    本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...

  2. JeecgBoot table 渲染图片

    使用jeecgboot框架,在table列表显示图片 使用Column 的customRender属性 通过以上设置,就会在列表页显示图片了

  3. SpringDataJPA 多对多的查询

     主要的结构目录: 创建Role.java package cn.itcast.domain; import javax.persistence.*; import java.util.HashSet ...

  4. 为什么MySQL不推荐使用uuid作为主键?

    前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么 ...

  5. 英特尔® 图形性能分析器(Intel® GPA)

    英特尔图形性能分析器概述 英特尔 GPA 是一套软件工具,它能提供平台级游戏性能分析功能,优化应用性能. 英特尔 GPA 包含以下组件: 英特尔 GPA 监控器 - 将英特尔 GPA 连接至应用(处于 ...

  6. Spring中的注解@Value("#{}")与@Value("${}")的区别

    1 @Value("#{}") SpEL表达式 @Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法.当然还有可 ...

  7. JAVA_JNI字段描述符“([Ljava/lang/String;)V”(Android)

    JNI字段描述符"([Ljava/lang/String;)V "([Ljava/lang/String;)V" 它是一种对函数返回值和参数的编码.这种编码叫做JNI字段 ...

  8. 什么是ResultSet

    概述: 在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表. ResultSet对象维护了一个游标,指向当前的数据行.开始的时候这个游标指向的是第一行. 注意: 如果调用了Re ...

  9. JDBC学习(错误反思)

    注意拼写错误!!! 注意拼写错误!!! 注意拼写错误!!!  文档注释快捷键   alt+shift+J    

  10. java异常相关说明(printStackTrace,fillInStackTrace等)

    我们在实际场景中很容易catch(Exception e) 简单粗暴 这样写代码有几个问题 1.你无法细分具体异常 因为有时需要针对不同异常 产生不同的应对行为 2.直接exception 往往不会包 ...