在Spring2中使用引介

本文介绍如何在不更改源代码的情况下,利用Spring2中的引介功能为已有类添加新接口,通过定义切面和配置引介器实现类的动态扩展。
今天基本上把《深入Spring2:轻量级J2EE开发框架原理与实践》中的AOP一章的最后的示例程序理清了,将会在这两天整理好后发出来。实在太困了,清理一下头绪,这里随便写一点关于Spring2中最简单的引介Introduction使用方法!
 
引介(Introduction)是指在不更改源代码的情况,给一个现有类增加属性、方法,以及让现有类实现其它接口或指定其它父类等,从而改变类的静态结构。Spring AOP通过采代理加拦截器的方式来实现的,可以通过拦截器机制使一个实有类实现指定的接口,由于是使用拦截器的机制,因此Spring AOP中引介的底层仍然是通知(Advice)及拦截(Interceptor)。Spring2引入了对AspectJ5的切入点表达式解析引擎,因此,对于一些普通的AOP切面模块功能,可以像AspectJ一样来使用AOP。本文简单演示Spring2中引介的使用!
 
假如有一个类demo.HeroImpl,现在我们要在系统中增加一个SmartHero接口,现在需要在不改变demo.HeroImpl的代码的情况下,让HeroImpl对象实现SmartHero接口。
 
SmartHero接口的内容如下:
public interface SmartHero{
void doSmartExit();
}
有一个SmartHero的实现SmartHeroImpl,内容如下:
public class SmartHeroImpl implements SmartHero
{
public void doSmartExit()
{
System.out.println("I'm smart exit!");
}
}
 
现在要让demo.HeroImpl实现SmarHero接口,可以通过下面的方式:
1、定义一个切面
import org.aspectj.lang.annotation.DeclareParents;
import org.aspectj.lang.annotation.Aspect;
public class AspectIntro
{
@DeclareParents(value="demo.HeroImpl",defaultImpl=SSmartHeroImpl.class)
private SmartHero smart;
}
 
2、在配置文件中使用使用 来开始@AspectJ自动代理。
 
3、声明一个切面Bean。
 

  
 
 
 
4、所有由Spring容器管理的HeroImpl对象都将会自实现了SmartHero接口。在客户端可以这样来使用:
HeroImpl hero=(HeroImpl)factory.getBean("hero");
SmartHero hero=(SmarHero)hero;

   当然,Spring2中也支持老版本AOP API中的ProxyFactoryBean来定义引介。要实现上面的功能,可以使用大致如下的方法:
1、定义一个IntroductionAdvisor(引介器),直接继承DefaultIntroductionAdviso来得到!
import org.springframework.aop.support.DefaultIntroductionAdvisor;
import org.springframework.aop.support.DelegatingIntroductionInterceptor;
public class SmartHeroIntroductionAdvisor extends DefaultIntroductionAdvisor {
 public SmartHeroIntroductionAdvisor() {
  super(new DelegatingIntroductionInterceptor(new SmartHeroImpl()), SuperHero.class);
 }
}
2、在Spring配置文件配置一个IntroductionAdvisor。如下:

  class="demo.SuperHeroIntroductionAdvisor" />
 
3、使用代理ProxyFactoryBean来定义Hero,如下:

   
     superHeroIntroduction
   
  

 
更多关于Spring2中AOP的详细信息,请参考《深入Spring 2:轻量级J2EE开发框架原理与实践》电子版!
 
 
 (本文作者: EasyJF开源团队   大峡 转载请保留作者声明,谢谢!)


今天基本上把《深入Spring2:轻量级J2EE开发框架原理与实践》中的AOP一章的最后的示例程序理清了,将会在这两天整理好后发出来。实在太困了,清理一下头绪,这里随便写一点关于Spring2中最简单的引介Introduction使用方法!
 
引介(Introduction)是指在不更改源代码的情况,给一个现有类增加属性、方法,以及让现有类实现其它接口或指定其它父类等,从而改变类的静态结构。Spring AOP通过采代理加拦截器的方式来实现的,可以通过拦截器机制使一个实有类实现指定的接口,由于是使用拦截器的机制,因此Spring AOP中引介的底层仍然是通知(Advice)及拦截(Interceptor)。Spring2引入了对AspectJ5的切入点表达式解析引擎,因此,对于一些普通的AOP切面模块功能,可以像AspectJ一样来使用AOP。本文简单演示Spring2中引介的使用!
 
假如有一个类demo.HeroImpl,现在我们要在系统中增加一个SmartHero接口,现在需要在不改变demo.HeroImpl的代码的情况下,让HeroImpl对象实现SmartHero接口。
 
SmartHero接口的内容如下:
public interface SmartHero{
void doSmartExit();
}
有一个SmartHero的实现SmartHeroImpl,内容如下:
public class SmartHeroImpl implements SmartHero
{
public void doSmartExit()
{
System.out.println("I'm smart exit!");
}
}
 
现在要让demo.HeroImpl实现SmarHero接口,可以通过下面的方式:
1、定义一个切面
import org.aspectj.lang.annotation.DeclareParents;
import org.aspectj.lang.annotation.Aspect;
public class AspectIntro
{
@DeclareParents(value="demo.HeroImpl",defaultImpl=SSmartHeroImpl.class)
private SmartHero smart;
}
 
2、在配置文件中使用使用 来开始@AspectJ自动代理。
 
3、声明一个切面Bean。
 

  
 
 
 
4、所有由Spring容器管理的HeroImpl对象都将会自实现了SmartHero接口。在客户端可以这样来使用:
HeroImpl hero=(HeroImpl)factory.getBean("hero");
SmartHero hero=(SmarHero)hero;

   当然,Spring2中也支持老版本AOP API中的ProxyFactoryBean来定义引介。要实现上面的功能,可以使用大致如下的方法:
1、定义一个IntroductionAdvisor(引介器),直接继承DefaultIntroductionAdviso来得到!
import org.springframework.aop.support.DefaultIntroductionAdvisor;
import org.springframework.aop.support.DelegatingIntroductionInterceptor;
public class SmartHeroIntroductionAdvisor extends DefaultIntroductionAdvisor {
 public SmartHeroIntroductionAdvisor() {
  super(new DelegatingIntroductionInterceptor(new SmartHeroImpl()), SuperHero.class);
 }
}
2、在Spring配置文件配置一个IntroductionAdvisor。如下:

  class="demo.SuperHeroIntroductionAdvisor" />
 
3、使用代理ProxyFactoryBean来定义Hero,如下:

   
     superHeroIntroduction
   
  

 
更多关于Spring2中AOP的详细信息,请参考《深入Spring 2:轻量级J2EE开发框架原理与实践》电子版!
 
 
 (本文作者: EasyJF开源团队   大峡 转载请保留作者声明,谢谢!)


全新升级的Spring课程系列,2024年与您相伴成长!!!一、言我们荣幸地宣布,将于2024年推出全新的Spring课程系列,旨在帮助初学者到进阶者一步步掌握Spring框架,并熟练应用于实际开发中。随着课程的进行,我们将逐步上传课件,为您提供丰富的学习资源,敬请持续关注。二、课程概览本课程是Spring全家桶课程的初识篇,课程将带您快速掌握Spring的核心知识点——AOP(面向切面编程)与IOC(控制反转),为您后续的学习打下坚实的基础。注意:该课程与【Spring框架解析】课程有所重叠,请不要重复购买哦!三、课程内容我们深知Spring Framework的核心原理对于学习和应用的重要性,因此本课程将聚焦于这些原理的实际应用。通过案例分析、项目实操等方式,让您在掌握核心知识点的同时,也能将其灵活应用于日常工作中。无论是面试准备还是项目开发,本课程都能为您提供有力的支持。四、Spring全家桶系列课程Spring全家桶生态圈汇聚了Spring框架及其众多相关组件、项目和模块,构成了一个强大的企业级Java应用程序开发、部署和管理解决方案。我们的Spring全家桶课程系列将涵盖这一生态圈的方方面面,从基础到进阶,让您全面掌握Spring的开发技巧和实践经验。本课程系列将聚焦于实操,让您通过实际操作加深对Spring框架的理解。如果您对Spring的原理等理论知识有浓厚兴趣,我们同时推荐您关注我们的【Spring框架解析】课程,以满足您更深入的学习需求。我们期待您的加入,共同在Spring的学习之路上成长和进步!Spring全家桶系列课程组成:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值