AOP是OOP的沿深,OOP通过类层次结构组织一个纵向的结构来处理公共行为,
但这样行为被水平的散布在了类层次结构中,一些类拥有了本生与他无关的行为。
AOP为这些公共行为==称为横切出来提供了有效的机制,并织入对象中,这种方式表现出了更到灵活性和许多
优越的特征。这样对象就不用关心这种与核心问题无关的操作。
横切有两种方式:
1动态横切
2静态横切
几个概念:
切入点:就是在哪里将代码织入。
建议:就是运行公共代码。
方面:切入点和建议加起来就是的了。
举个列子说明一下AOP(这里是aspect not agient)在现实中的好处,我想了想,比如说在实现数据层的时候,为了将数据访问代码对立于数据访问厂商的库,我们一般要定义一个接口。
Interface DataAccess
{
boolean UpdateData(BussinessObj A);
}
public class SqlDataAccess extend DataAccess//for java
{
public Boolean UpdateData(BussinessObj A)
{
….
}
}
public class SqlDataAccess : DataAccess//for C#
{
public bool UpdateData(BussinessObj A)
{
….
}
}
这是oop的方式,但考虑一中情况假如一个厂商的接口规定我们的业务对象要实现一个接口,好了
现在我们不得不把我们的业务对象实现Another接口
这样不好吧,这样就让这个业务对象对其他数据对象不再有效,要是换了其他数据对象就不得不修改这个对象以去除Another,这样将导致对供应商代码的直接依赖和耦合。运用方面的静态横切:
public aspect AnotherAspect { declare parents: BussinessObj implements Another; public boolean BussinessObj.AnotherMethord(){ if(this.Perpery () != null){ return true; }else{ return false; } }}
通过这样将Another接口用AOP框架织入BussinessObj而
BussinessObj并没有察觉他实现了Another接口,这使得这个对象对其他数据对象都是有意义的,换了其他的,并不需要修改代码。这个列子不一定得体但能够说明问题。总之AOP提供了一种横向的思维,弥补了OOP的不足。
考虑一下现在的应用服务器,比如.net平台下我们要处理象事务,对象池等这些复杂的东西,我们只需声明属性,这样应用服务器会将这些代码织入,完成公共处理。又入jboss4.0现在就是才用了AOP,在容器里的东西就这样实现了事务,对象池这些东西,而且相对与对象的实现方式更加简洁。J2EE不大熟悉不多说了。。.net和j2ee分别有了自己的AOP框架,目前有两种方式实现,通过嵌入字节码和通拖代理。好了今天就说这些。努力!
浙公网安备 33010602011771号