1. 程式人生 > >Spring-AOP為類增加新的功能

Spring-AOP為類增加新的功能

-a ring mat ctx implement 另一個 double tar targe

適配器的簡單應用實現:

  比如:有一個類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為類增加新的功能