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();
}
}
分享到:
相关推荐
随着软件技术的发展及需求的增加,OOP逐渐表现出其不足之处,AOP在继承OOP基础之上很好地解决了00P ...理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点
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注释...
系统基于B/S 多层Web 体系结构,在J2EE 平台上利用开源架构JSF、Spring、 Hibernate 等技术进行开发。按照软件工程方法,对造纸生产过程进行需求分析。...使用了J2EE 新兴框架JSF,实现高效灵活的web 端开发。
3.1Java平台AOP技术概览3.1.1AOP技术在Java平台中的应用AOP在实验室应用和商业应用上,Java平台始终走在前面。从最初也是目前最成熟的AOP工具——AspectJ,到目前已经融和在企业级容器JBoss中的JBossAOP,均建立在...
·在java和j2ee设计模式实现中使用方面 ·使用aop特有的设计模式,增强现有的java应用程序 本书展示了为什么以及如何使用aop技术来解决常见的java开发问题。本书利用受欢迎的问题/解决方案/讨论格式,介绍了...
4.1.Net平台AOP技术概览.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,...
摘要快速发展的开发人员社区、对各种后端技术(包括JMS、JTA、JDO、Hibernate、iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得SpringFramework对于J2EE应用程序...
如何利用AOP和loC解决企业级软件开发中的常见问题;web层设计,以web层在设计良好的J2EE应用中的地位;J2EE应用中最有效的数据访问技术,包括JDBC、Hibernate和JDO;如何利用开源产品提升生产率、减少编码量;如何从...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...
Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等...