从而消除了MainApplicat论文毕业ion 与businesslogicbean 之间的耦合
毕业论文库:计算机 时间:2016-10-11 点击:
次
< property name= ?pattern?>
毗连点: 措施执行进程中明晰的点, 如要领的挪用或特定的异常被抛出。
脚色分另外问题。借助于面向工具的阐明、设计和实现技能, 开拓者可以将问题规模的?? 名词 转换成软件系统中的工具, 从而很自然地完成从问题到软件的转换。可是在详细的应用进程中, 经常会呈现这种环境, 一个需求会贯串许多脚色。譬喻在一个系统中经常存在着这样一些民众的需求: 日志、安详性、异常捕获等, 这些成果贯串整个系统的多个模块, 我们将这种行为称为?? 横切存眷点 。因为这些横切存眷点超过了编程模子中的典范职责权限, 利用传统的技能开拓, 这些横切存眷点的实现漫衍在各个模块中, 存在着代码分手和代码杂乱的问题, 使得整个系统难以设计、领略、实现和改造。
此刻系统有一个需求要跟踪foo ( ) 要领的执行。在要领foo( ) 执行前提示。对付此横切存眷点的详细代码实现如下:
cussing aspects of AOP [ J] . Communications of the ACM,2001, 44( 10) : 33??38.
IBusinessLogic testObject = ( IBusinessLogic ) ctx . getBean (?
}
点的荟萃。AOP 框架答允开拓者指定切入点: 譬喻,利用正则表达式。
AOP 署理: 一个用AOP 框架缔造出来的工具, 包罗通知。在Spring 中, 一个AOP 署理是个jdk 的动态署理可能是CGLIB 署理。
图1?? AOP 的开拓进程
< bean id= ?beanTarget? class= ?BusinessLog ic?/ >
< bean id = ? theTracingBeforeAdvice? class = ?TracingBefore??
< property name= ?interceptorNames?>
图2 ?? 措施运行的顺序图
pectJ 的编译时织入, Spring 是在运行时完成织入的。
< value> . / IBusinessLogic/ . foo< / value>
< value> IBusinessLogic< / value>
}
< ! - - Bean 类- - >
import org. springframework. aop. MethodBeforeAdvice;public class TracingBeforeAdvice implements MethodBeforeAd??
方面: 一个存眷点的模块化, 这个存眷点实现大概别的横切多个工具。Spring 利用术语一个工具的advisor 来暗示一个方面, 包括一个通知和一个指定特定毗连点的切入点。
< value> theTracingBeforeAdvisor< / value>
< ref local= ?beanTarget?/ >
ic 接口的foo( ) 要领为切入点。在springconfig. xml 文件最后一个bean 声明是指定了一个类来实现通知。
[ 1] ?? Elrad T, Aksit M, Kiczales G, Lieberherr K, Ossher H. Dis??
< beans>
, 并可以或许自动地将这些横切存眷点织入到面向工具的软件系统中, 从而实现了横切存眷点的模块化。
vice{
要害词: 面向方面编程; AOP; Spring 框架; IOC1 ?? AOP 技能简介
< ? xml version= ?1. 0? encoding= ?UTF??8?? >
AOP 包罗三个清晰的开拓步调[ 2]
import java. lang. reflect.Method;
MainApplication 类通过IOC( Inversion of Control) 也称赖性打针( Dependency Injection ) 的模式来装载和打点BusinessLogic 类的实例。详细做法就是先通过读取设置文件springconfig . xml实例化ApplicationContext 工具ctx, 然后挪用ctx . getBean(?busi??
AOP( Aspect??Oriented??Programming ) 面向方面编程是由Gregor Kiczales 在1997 年提出的一个全新的编程技能, 为开拓者提供了一种描写横切存眷点的机制[ 1]
( 1) 方面解析: 解析需求提取识别横切存眷点和一般存眷点。在这一步里, 把焦点模块级存眷点和系统级的横切存眷点分分开来。
Spring AOP 的一些观念:
切入点: 指定一个通知将被激发的一系列毗连
第一步: 方面解析, 业务逻辑处理惩罚和要领跟踪, 前者为一般存眷点, 后者为横切存眷点。
/ / 详细实现
当应用措施挪用IBusinessLogic 的foo( ) 要领之前将织入TracingBeforeAdvice 的before 要领, 从而到达了跟踪foo ( ) 要领的目标。运行进程如图2 所示。
/ / 执行bean 的foo( ) 要领
lApplicationContext;
}
< list>
成立一个TracingBeforeAdvice 类来实现Spring 框架的MethodBeforeAdvice 接口, 此接口只有一个before 要领需要实现, 从而到达通知的实现。在Spring 框架中MethodBeforeAdvice是在一个毗连点之前执行的通知。
AOP 界说了如下的语言布局和语义, 这些术语不是Spring 框架所特有的。
< / property>
}
< / property>
ented Programming [ DB/ OL] . http: / / www. javaworld. com/javaworld/ jw??01??2002/ jw??0118??aspect. html, 2002??01??01.
通知: 在特定的毗连点AOP 框架执行的行动。
Spring 框架是一个开源的项目, 正做为一种轻量级框架获得越来越遍及的重视和利用。Spring AOP是Spring 框架中的一个重要组件, 作为一种非侵略性的, 轻型的AOP 框架, 开拓者无需利用预编译器或其他的元标签, 便可以在Java 措施中利用它。
public classMainApplication{
< / beans>
别的, 当往系统中插手新的模块时, 已有的方面自动横切进来, 使系统易于扩展。
方面是AOP 的焦点, 就是把对一个大概横切差异的多个工具的存眷点模块化, 这些模块化单位就叫?? 方面 。通过分别?? 方面 代码, 横切存眷点变得容易处理惩罚。开拓者可以在编译时变动、插入或撤除系统的?? 方面 , 甚至重用系统的?? 方面 。
< property name= ?proxyInterfaces?>
< ! - 通知类- - >
< ! DOCTYPE beans PUBLIC ???/ / SPRING/ / DTD BEAN/ /EN? ?http: / / www. springframework. org/ dtd/ spring??beans. dtd?>
< ! - - Advisor 的通知切入点的界说- - >
< / list>
( 2) 存眷点实现: 各自独立地实现这些存眷点。
系统容易扩展: 由于方面模块基础不知道横切存眷点, 所以很容易通过成立新的方面插手新的成果。
传统的面向工具技能很好地办理了软件系统中
businesslogicbean?) ;
public class BusinessLog ic implements IBusinessLogic{public void foo( ) {
参考文献:
2 ?? Spring AOP 先容
Name( ) + ?)?) ;
Spring 框架自己也在成长中, 在最新的测试中, 和其他AOP 框架对比Spring 在一些常用坚守上的机能表示更为突出。可是AOP 作为一种新的编程思想还没有完全成熟, 还需要实践来不绝地摸索和完善。
public void foo( ) ;
Advice?/ >
?? ?? < / bean>
< / property>
织入: 组装方面建设通知化工具。差异于As??
}
第二步: 存眷点的实现, 对付业务处理惩罚逻辑, 代码实现如下:
方针工具: 包括毗连点的工具。
?? ?? 通过下面一个例子来说明Spring AOP 的详细实现。系统需求是要跟踪在一个业务逻辑( IBusiness??
< bean id= ?businesslogicbean?
/ / 初始化工具
更好的代码重用性: AOP 把每个方面实现为独立的模块, 每个存眷点的实现都不知道其它存眷点是否会?? 存眷 它, 模块之间是松散耦合的, 松散耦合的实现凡是意味着更好的代码重用性, AOP 在使系统实现松散耦合这一点上比OOP 做得更好。
}
[ 2] ?? Ramnivas Laddad. Separate Software Concerns with Aspect??ori??
< / property>
< ref local= ?theTracingBeforeAdvice?/ >
( 3) 方面的从头组合: 在这一步里, 方面集成器通过必然法则把已经实现的各自存眷点组合起来, 重组进程! ! ! 也叫织入或整合! ! ! 从而构建最终系统。
体实现
import org. springframework. context. ApplicationContext;import org. springframework. context. support. FileSystemXm??
nesslogicbean?) 要领, 获得BusinessLogic 类的实例, 从而消除了MainApplication 与businesslogicbean 之间的耦合。设置文件springconfig. xml 代码如下:
toryBean 返回的范例, target 指的是被切的bean, interceptorNames是指利用到的拦截机, 把theTracingBeforeAdvisor 预先界说到声明的businesslogicbean 中, 声明advisor, 界说了一个theTracingBe??
在springconfig . xml 文件中, proxyInterfaces 是指此proxyFac??
System. out. println(?Hello world! ( by? + this. getClass( ) . get??
摘要: 先容了面向方面编程( Aspect??Oriented??Programming, AOP) 的思想、开拓步和谐利益, 而且给出了一个基于Spring 框架的详细AOP 的实现。
近几年来AOP 作为一新技能获得迅速成长,
public void before(Method method, Object[ ] objects, Object o)throws Throwable{
4 ?? 竣事语
< / property>
Spring 提供了一个用尺度Java 语言编写的AOP框架, Spring 实现AOP 的途径差异其他大部门AOP框架。它的方针不是提供极其完善的AOP 实现, 而是提供一个和Spring IOC 细密整合的AOP 实现, 辅佐办理企业应用中的常见问题。因此, Spring AOP 的成果凡是是和Spring IOC 容器连系利用的。
< ! - 设置Bean - - >
Logic) 处理惩罚中foo( ) 要领的挪用环境。
testObject. foo( ) ;
, 如图1 所示。
foreAdvice 的通知和一个切入点。切入点的正则表达式为<value> . / IBusinessLogic/ . foo< / value> , 说明选择IBusinessLog??
public static void main( String [ ] args) {/ / 读取设置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext( ?springconfig. xml?) ;
< property name= ?target?>
class = ? org. springframework. aop. support. RegexpMethod??
class= ?org.springframework. aop. framework. ProxyFactoryBean?>
AOP 的利益[ 2] : AOP 可辅佐我们办理上面提到的代码杂乱和代码分手所带来的问题, 它尚有一些此外利益。
< bean id= ?theTracingBeforeAdvisor?
PointcutAdvisor?>
模块化横切存眷点: AOP 用最小的耦合处理惩罚每个存眷点, 使得纵然是横切存眷点也是模块化的。这样的实现发生的系统, 其代码的冗余小。模块化的实现还使得系统容易领略和维护。
public interface IBusinessLogic{
第三步: 方面的从头织入, 成立一个MainApplication 类, 来挪用业务逻辑处理惩罚的foo( ) 要领时, 此应用在运行时将织入跟踪要领。
3 ?? 一个基于Spring 框架的AOP 的具
< property name= ?advice?>
< / bean>
}