`
junli0411
  • 浏览: 135859 次
  • 来自: ...
社区版块
存档分类
最新评论

J2EE开发中使用AOP技术

阅读更多
J2EE开发中使用AOP技术

在传统的OO面向对象技术中,任何逻辑都需用基于类来封装(这里主要讨论Java技术),随着项目的做大,在管理大量的类文件是非常困难的,而且现在软件提倡的是高层抽象,底层实现,一层一层的架起整个项目,最终体现给程序员的是当实现MVC的时候,就再也不用管理和理会底层的实现,包括数据库DAO层.
Java技术中提供了接口技术,接口就是对某一类事物的抽象,它可以由具体的类implements来实现,但是一个接口可能有多种实现,具体的实现将由程序员的设计不同而不同,如果我们调用接口类型,它到底和哪个实现类想关联呢?
  通常情况下:如下:
   public interface Interface{
     public void say();
}
public class A implements Interface{
  public void say(){
System.out.println("this is class A");
   }
}
public class B implements Interface{
  public void say(){
System.out.println("this is class B");
   }
}

现在摆在面前的有一个接口和它的2个实现类,现在根据高层抽象理论,在实现业务逻辑时程序员将不再考虑它的底层实现A或B,但接口做为抽象,没有任何实现,具体是这么关联呢?
这里需要使用的是Spring的AOP技术:
首先定义Spring Ioc applicationContext.xml
<?xml version="1.0" encoding="1.0" ?>
<!DOCTYPE beans
  PUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-bean.dtd">'
<beans>
<bean id="A" class="A"/>
<bean id="B" class="B"/>
<bean id="Aproxy" class="org.springframework.aop.framework.ProxyBeanFactory">
<property name="proxyInterfaces">
   <value>Interface</value>
<property>
<property name="target">
   <ref local="A"/>
</property>
</bean>
<bean id="Bproxy" class="org.springframework.aop.framework.ProxyBeanFactory">
  <property name="proxyInterfaces">
    <value>Interface</value>
  </property>
  <property name="target">
    <value>B</value>
  </property>
</bean>
</beans>

具体业务逻辑实现:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
  public class test{
   public static void main(String[] args){
    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
    Interface inter=(Interface)context.getBean("Aproxy");
    inter.say();
     }
}
以上程序将输出" this is class A"  可以看出,做为高层抽象的概念完全体现了出来,在test类中根本就没有A类的任何痕迹.

另外一种AOP技术就是传奇的AspectJ技术.借助与cglib动态字节码生成技术,它可以在不用改写源代码的情况下直接对目标程序进行添加功能.
  假设现在有个类 C
    public class C {
      public void say(){
       System.out.println("This is Class C");
     }
现在想要给它加个方法 otherSay()用来输出"hello world",传统的机械式方法就是直接修改C的代码,这样做的后果就是造成了C必须被重新编译,但是用AspectJ技术就可以在不用重新编译的情况下直接给C注射一个新方法,具体实现如下:
  public interface InterfaceC{
    public void otherSay();
  }

public aspect D{
  declare parents: C extends InterfaceC;
  public void C.otherSay(){
   System.out.println("hello world");
   }
}

现在就可以这样调用:
public class test{
  public static void main(String[] dd){
    C c=new C();
   //执行C的原配方法 say
   c.say();
  //执行被动态注射后的方法
  InterfaceC cc=(InterfaceC)c;
  cc.otherSay();
  }
}
 


分享到:
评论

相关推荐

    AOP技术及其在J2EE中动态代理实现

    随着软件技术的发展及需求的增加,OOP逐渐表现出其不足之处,AOP在继承OOP基础之上很好地解决了00P ...理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点

    J2EE应用开发详解

    254 15.3 依赖注入 259 15.3.1 Constructor注入 259 15.3.2 Setter注入 261 15.3.3 Method注入 263 15.4 Spring AOP技术 266 15.4.1 装备(advices) 267 15.4.2 Spring AOP的传统用法 275 15.4.3 基于@AspectJ注释...

    基于J2EE架构的生产管理系统设计

    系统基于B/S 多层Web 体系结构,在J2EE 平台上利用开源架构JSF、Spring、 Hibernate 等技术进行开发。按照软件工程方法,对造纸生产过程进行需求分析。...使用了J2EE 新兴框架JSF,实现高效灵活的web 端开发。

    Java平台AOP技术研究

    3.1Java平台AOP技术概览3.1.1AOP技术在Java平台中的应用AOP在实验室应用和商业应用上,Java平台始终走在前面。从最初也是目前最成熟的AOP工具——AspectJ,到目前已经融和在企业级容器JBoss中的JBossAOP,均建立在...

    AspectJ Cookbook中文版

     ·在java和j2ee设计模式实现中使用方面  ·使用aop特有的设计模式,增强现有的java应用程序  本书展示了为什么以及如何使用aop技术来解决常见的java开发问题。本书利用受欢迎的问题/解决方案/讨论格式,介绍了...

    .Net平台AOP技术研究

    4.1.Net平台AOP技术概览.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,...

    使用SPRINGAOP框架和EJB组件

    摘要快速发展的开发人员社区、对各种后端技术(包括JMS、JTA、JDO、Hibernate、iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得SpringFramework对于J2EE应用程序...

    J2EE Development Without EJB 学习心得

    如何利用AOP和loC解决企业级软件开发中的常见问题;web层设计,以web层在设计良好的J2EE应用中的地位;J2EE应用中最有效的数据访问技术,包括JDBC、Hibernate和JDO;如何利用开源产品提升生产率、减少编码量;如何从...

    基于springboot实现OA自动化办公系统附数据库文件+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于java SSM框架实现超市管理系统高级版v2附项目源码+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于javaWeb实现留言管理系统附项目源码+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于javaweb 实现超市管理系统附数据库文件+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于java SSM框架实现考勤管理系统附数据库文件+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于javaWeb实现毕业生离校管理系统附数据库文件+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

    基于java SSM框架实现进销存或库存管理系统附项目源码+文档说明

    Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...

Global site tag (gtag.js) - Google Analytics