SpringAOP:为目标类添加新的功能(拓展接口)
2016-08-22 19:34
281 查看
比如,原来的手机只能打电话,发短信。
现在,手机可以做为pad(掌上电脑),可以上网,看电影,打游戏。
但是,我不想去继承实现,我就要用AOP。
这次Aspect可就不同了
首先出场,基础类
闪亮登场,我们的主角:Aspect类
JavaConfig类
注意:@EnableAspectJAutoProxy,不然一切都是浮云
接下来,见证奇迹的时刻:手机变电脑
测试类
XML 配置方案
现在,手机可以做为pad(掌上电脑),可以上网,看电影,打游戏。
但是,我不想去继承实现,我就要用AOP。
这次Aspect可就不同了
首先出场,基础类
package com.xbz.learn.spring.aspect.exspandMethod; public interface Mobile { /** * 打电话 */ public void doCall(); }
package com.xbz.learn.spring.aspect.exspandMethod; public interface Pad { /** * 做为电脑,可以看电影 */ public void watchMovie(); }
package com.xbz.learn.spring.aspect.exspandMethod; public class SampleMobile implements Mobile{ public void doCall() { System.out.println("可以打电话"); } }
package com.xbz.learn.spring.aspect.exspandMethod; public class SamplePad implements Pad{ public void watchMovie() { System.out.println("可以看电影"); } }
闪亮登场,我们的主角:Aspect类
package com.xbz.learn.spring.aspect.exspandMethod; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.DeclareParents; @Aspect public class MobileAspect { /** * value指定了要为哪些类引入该接口 * <br/> * com.xbz.learn.spring.aspect.exspandMethod.Mobile+表示所有的子类,不包括Mobile * <br/> * */ @DeclareParents(value="com.xbz.learn.spring.aspect.exspandMethod.Mobile+", defaultImpl=SamplePad.class) public static Pad pad; }
JavaConfig类
注意:@EnableAspectJAutoProxy,不然一切都是浮云
package com.xbz.learn.spring.aspect.exspandMethod; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; @Configuration @EnableAspectJAutoProxy public class JavaConfig { @Bean public MobileAspect mobileAspect(){ return new MobileAspect(); } @Bean public Mobile mobile(){ return new SampleMobile(); } }
接下来,见证奇迹的时刻:手机变电脑
测试类
package com.xbz.learn.spring.aspect.exspandMethod; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={JavaConfig.class}) public class JavaConfigTest { @Autowired private Mobile mobile; @Test public void testMobileAspect(){ System.out.println(mobile.getClass().getName()); System.out.println("This mobile is a pad?"+(mobile instanceof Pad)); Pad pad=(Pad) mobile; pad.watchMovie(); } }
XML 配置方案
<?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:context="http://www.springframework.org/schema/context" xmlns:aop=" 4000 http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 使用CGLIB代理创建代理对象,默认使用JDK代理 --> <aop:aspectj-autoproxy proxy-target-class="false"></aop:aspectj-autoproxy> <aop:config> <aop:aspect > <aop:declare-parents types-matching="com.xbz.learn.spring.aspect.exspandMethod.Mobile+" implement-interface="com.xbz.learn.spring.aspect.exspandMethod.Pad" default-impl="com.xbz.learn.spring.aspect.exspandMethod.SamplePad" /> </aop:aspect> </aop:config> <!-- 目标类 --> <bean id="mobile" class="com.xbz.learn.spring.aspect.exspandMethod.SampleMobile"></bean> </beans>
相关文章推荐
- 从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数
- spring boot 添加aop功能
- spring使用AOP和自定义注解功能添加日志管理--实用
- 通过Spring Aop编程思想,利用注解为某些对象添加新的功能
- spring boot 添加aop功能
- 利用AOP为Spring Data Jpa的接口Repository添加全局自定义过滤
- SpringAOP给类添加新的功能
- 使用Spring AOP添加统计时间的功能
- 从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数
- Spring.net 中的AOP功能
- Quartz(二)在Spring中动态启动,暂定,添加,删除定时功能
- 16_传智播客Spring2.5视频教程_使用CGLIB实现AOP功能与AOP概念解释
- 编码实现用JDK中的Proxy实现springAOP功能
- 最简单的动态代理实例(spring基于接口代理的AOP原理)
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- SSH集成框架下真正实现Spring AOP拦截功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 2
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能
- springAOP理解——java中的proxy实现AOP功能
- 【转帖】扩展微软DDK中的NDIS IM驱动的功能:添加一个DeviceIoControl接口