| |
Spring框架与AOP思想的研究与应用 |
|
时间: 2006-05-07 来自:计算机与信息技术 |
 |
|
3.AOP思想与动态代理模式的应用实例
综上我们分析了Spring框架的事务管理机制的基本现实原理。尽管Spring框架集中体现了当前流行框架中未曾关注到的一些内容,但是,Spring框架存在晦涩难懂的致命问题。以上通过对Spring框架的一些基本实现原理的研究,给我们带来了一些启示。我们如果不直接使用庞大的Spring框架,而是将融入Spring框架中的AOP思想直接应用于程序中,既绕过了Spring框架这个高门槛,又利用了Spring框架中先进的设计理念,这样便达到了一举两得的目的。
下面我们来看一段代码,我们来编写一个Dynamic
Proxy based AOP实现的实例。假设现在有一个UserDao接口和以及其实现类UserDaoImp。
UserDAO.java:
public interface UserDAO { public void
saveUser(User user); }
UserDAOImp.java:
public class
UserDAOImp implements UserDAO{ public void saveUser(User user)
{ …… } } | 我们需要在saveUser方法中添加对一个业务对象的锁,比如在saveUser前后加锁和解锁。在不影响外部逻辑和不对现有的代码做任何改动的前提下,代理模式是一个不错的选择。但是如果有多个类似的接口,面对每个接口都要实现一个类似的Proxy,实在是一个烦琐无味的苦力过程。回想一下Spring在处理这个问题上的设计理念我们不难想到,使用动态代理模式,是这个问题的一个聪明的解决方法。
public class AOPHandler implements InvocationHandler { private
static Log logger = LogFactory.getLog(AOPHandler.class); private List
interceptors = null; private Object originalObject; public Object
bind(Object obj) { this.originalObject = obj; return
Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces().this); } public
Object invoke(Object proxy, Method method, Object[] args) throws
Throwable{Object
result=null if(method.getName.startsWith(“saveUser”)){ lock(); result=method.invoke(this.originalObject,args); unlock(); } return
result; } private void lock(){ logger.info(“lock
object!”); } private void unlock(){ logger.info(“unlock
object!”); } } | 上述代码中并没有出现与具体应用层相关联的接口以及类的引用,所以对所有的类都适用。这就解决了用静态Proxy类实现所产生的弊端。
总结与展望
以上我们讨论了Spring框架基于动态AOP机制实现以及动态代理机制的应用,围绕着AOP的实现与应用,一直有一个热门的话题,即权限管理。Spring框架目前对AOP的支持做得相当出色,但是一直有一个尴尬的问题尚未解决,那就是目前还没有一个完备的权限管理组件。仔细想想,这并不是AOP的瓶颈,而是因为权限管理的形式过于灵活和复杂多变,系统中的权限管理逻辑多种多样各不相同,我们很难做出一个统一的管理与操作。另一方面,权限管理作为一个独立的切面显得过于庞大,需要进一步切分设计,设计过程复杂,实现难度较大。所以我们还在期待着AOP思想在权限管理方面能有突破性的应用与扩展。
|
|
|
|
|
|
标签NewsAbout错误:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
|
|
|
|
|
|