`
Joo
  • 浏览: 46303 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

AOP功能和AOP框架

阅读更多
这几天一直在思考在一个应用上实现AOP功能到底和实现独立的一个AOP框架有什么不同。利用JDK动态代理或CGLIB甚至用Servlet Filter就能实现简单的AOP功能,那么AOP框架的价值究竟在哪里?
表面上来看,使用框架除了应用开发人员不需要知道CGLIB原理,代码中不会出现implements MethodInterceptor或Enhancer.Create()之外,找不到框架可以做而用CGLIB代码不能做的事情啊.BOSS让我提炼一个简单的AOP,一开始我准备包装一下CGLIB API做,但后来发现如果是实现一般的AOP功能,CGLIB已经可以完全胜任.如果要做一个AOP框架,我不知道应该往什么方向努力啊!!!!

另,看不明白CGLIB中Dispatcher和LazyLoader的用法啊,望指点.
分享到:
评论
5 楼 Joo 2008-10-14  
用代码实现代理类的生成总觉得不好用啊,使用ProxyFactory的客户代码总是不能跟客户代码松耦合
尤其是当这个客户代码是另外一个框架或者公共组件的一部分的时候,从而造成组件之间的耦合

package byd.rbac.proxy;

import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;

/**
 *
 * @author lilei1
 * <a href="mailto:li.lei1@byd.com">li.lei1@byd.com</a>
 */
public class ProxyFactory {

    private static Boolean flag;
    private static ProxyFactory factory = new ProxyFactory();

    private ProxyFactory() {
    }

    public static ProxyFactory getInstance() {
        return factory;
    }

    public ProxyFactory setSwitch(boolean isOpen) {
        flag = isOpen;
        return factory;
    }

    public static boolean isOpen() {
        return flag;
    }

    /**
     * 使用AuthorizeInterceptor使用默认的拦截器
     * @param target
     * @return
     */
    public Object getProxy(Class target, String userID, String scope, String operation, String type) {
        try {
            if (isOpen()) {
                Enhancer enhancer = new Enhancer();
                enhancer.setSuperclass(target);
                enhancer.setCallback(new AuthorizeInterceptor(userID, scope, operation, type));
                return enhancer.create();
            } else {
                return target.newInstance();
            }
        } catch (InstantiationException ex) {
            Logger.getLogger(ProxyFactory.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (IllegalAccessException ex) {
            Logger.getLogger(ProxyFactory.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (Throwable e) {
            e.printStackTrace();
            throw new Error(e.getMessage());
        }
    }

    /**
     * 使用自定义的拦截器产生代理
     * @param target
     * @param callback
     * @return
     */
    public Object getProxy(Class target, MethodInterceptor callback) {
        try {
            if (isOpen()) {
                Enhancer enhancer = new Enhancer();
                enhancer.setSuperclass(target);
                enhancer.setCallback(callback);
                return enhancer.create();
            } else {
                return target.newInstance();
            }
        } catch (InstantiationException ex) {
            Logger.getLogger(ProxyFactory.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (IllegalAccessException ex) {
            Logger.getLogger(ProxyFactory.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        } catch (Throwable e) {
            e.printStackTrace();
            throw new Error(e.getMessage());
        }
    }
}

4 楼 xianglei 2008-08-28  
vvgg 写道
起始簡單的包裝一層就夠了,把代理類創建的過程Enhancer.Create()過程包裝一下,預留MethodInterceptor的實現就好了。

LazyLoader是延遲加載的Callback

3 楼 raymond2006k 2008-08-28  
直接使用现成的最好,省时省力。
2 楼 Joo 2008-08-28  
不知道楼上知道不知道Enhancer类本身就提供多个静态的重载的create()方法
我只是在想如果要按照标准的AOP框架实现连接点、切点、增强等概念有没有必要,重复做轮子不如用好现在的轮子...只是貌似Spring aop框架都没有提供InterceptorChain的功能,达到多个advice reuse的目的,而反过来CGLIB中却又没有Exception处理的callback类型

另,看字面我也知道是延时加载,但是怎么用具体?
1 楼 vvgg 2008-08-28  
起始簡單的包裝一層就夠了,把代理類創建的過程Enhancer.Create()過程包裝一下,預留MethodInterceptor的實現就好了。

LazyLoader是延遲加載的Callback

相关推荐

    C# 实现 AOP微型框架

    7. **微型框架**:与大型、功能丰富的AOP框架(如Spring.NET或Unity)相比,微型框架通常更轻量级,专注于核心的AOP功能,适合小型项目或作为学习AOP原理的起点。 8. **EnterpriseServerBase.Aop**:这可能是框架的...

    C# 实现的AOP框架

    总的来说,C#实现的AOP框架能够极大地提升代码的可维护性和可扩展性,通过将通用功能抽取为切面,可以减少代码冗余,提高开发效率。然而,设计一个全面的AOP框架需要对.NET Framework有深入的理解,并考虑如何优雅地...

    仿springAOP框架

    在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱,其中AOP(面向切面编程)是其核心特性之一。AOP允许开发者将关注点从主业务逻辑中分离出来,如日志记录、事务管理等,实现代码的模块化和可复用性...

    仿 Spring 手写 IoC、AOP 框架.rar

    本教程将带你深入理解这两个概念,并通过手写一个简易的IoC和AOP框架来加深理解。 **依赖注入(IoC)** 依赖注入是Spring的核心特性之一,它允许开发者将对象的创建和管理权交给框架,从而降低组件之间的耦合度。在...

    DELPHI AOP框架(meAOPen)

    总之,meAOPen作为Delphi的AOP框架,通过引入面向方面的编程思想,为Delphi开发者提供了更高级别的抽象和控制,有助于提高代码质量,降低维护成本,尤其适合于处理那些贯穿多个类或模块的横切关注点。在实践中,合理...

    Spring AOP框架实现的结构分析

    然后,我们将介绍 Spring AOP 框架所涉及到的核心组件列表,包括 Advisor、Advice、Pointcut、Advised、AopProxy 和 AopProxyFactory 等组件,并详细介绍它们之间的结构关系图。 首先,让我们来了解 AOP 的基本概念...

    C#实现的IOC和AOP框架,供学习

    这个名为“GreeFramOfficial”的压缩包文件,很可能是提供了一个基于C#实现的IOC和AOP框架,供开发者学习和使用。 IOC(Inversion of Control)的核心思想是将对象的创建和管理交给一个容器来处理,而不是由对象...

    简易的AOP框架

    在Java中,Spring框架是最著名的AOP实现之一,但这里我们讨论的是一个简易的AOP框架,它可以帮助理解AOP的基本概念和工作原理。 该简易AOP框架包含以下几个关键组件: 1. **配置文件**:这是定义切面(aspect)和...

    轻量级的.NET对象查找服务和AOP开发框架测试源码

    在.NET开发领域,轻量级的对象查找服务和面向切面编程(AOP)框架是提升代码可维护性和灵活性的重要工具。本项目名为“轻量级的.NET对象查找服务和AOP开发框架测试源码”,主要关注的是Netop框架,它是一个专为.NET...

    Android-Jet-AOP一个AndroidAOP框架

    Android-Jet-AOP便是一个专为Android平台设计的AOP框架,它借助注解和AspectJ技术,使得在Android应用中实现AOP变得简单易行。 ### 一、面向切面编程(AOP) AOP的核心理念是将程序中的关注点分离,关注点可以理解...

    实现AOP功能的jar包

    Spring AOP就是基于AOP Alliance接口与其他AOP框架进行交互的,这样可以确保不同AOP框架之间的兼容性。 5. **切面(Aspect)**: 切面是AOP的核心概念,它封装了横切关注点,例如日志记录、事务管理、性能监控等。切...

    Android-框架知识整理之AndroidAOP编程思想

    3. **Android Annotation库**:像Dagger、Butter Knife等流行的Android库也采用了注解处理技术,它们虽然不是纯AOP框架,但可以实现类似的功能,例如依赖注入。通过在类或方法上添加注解,这些库能在编译时生成辅助...

    aopalliance-1.0.jar及aopalliance源码

    AOP Alliance的核心在于它的简单性,它仅定义了一些基本的接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,这些接口是大多数AOP框架共有的基础。...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    spring mvc框架下的aop例子

    在Spring MVC框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,比如日志、事务管理、安全检查等,从核心业务逻辑中解耦出来。下面是一个简单的Spring MVC中AOP的例子,分为配置和实现两...

    aop框架教程文件

    本教程涵盖了AOP框架的基本概念、Spring AOP的使用以及反射技术的应用,通过学习这些内容,你可以更好地理解和应用AOP框架来提高代码的复用性和可维护性。在实际项目中,结合具体需求,灵活运用AOP框架,可以显著...

    today-aop一个高性能的轻量级aop框架

    总的来说,today-aop框架是Java开发中的一个实用工具,它以高性能和轻量级为特点,简化了AOP的使用,提高了代码的可维护性和可扩展性。通过熟练掌握today-aop,开发者能够更高效地构建和维护复杂的Java应用程序。

    aopalliance

    在Java开发领域,Spring框架以其强大的功能和灵活性备受青睐。而在Spring 2.0版本中,一个不可或缺的组件就是"AOPAlliance"。这个组件扮演着至关重要的角色,它为不同面向切面编程(AOP)实现提供了一个统一的接口,...

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它在许多AOP框架中被用于动态创建子类以实现方法拦截。当目标对象没有实现任何接口时,Spring会使用CGLIB来创建代理。CGLIB通过生成目标类的子类...

Global site tag (gtag.js) - Google Analytics