`

sprig AOP之ProxyFactory

阅读更多
我们在项目中大多使用的声明式的AOP配置,其实在spring中也提供了编程式的AOP实现方法,具体在ProxyFactory中例如ProxyFactory例子如下:

TargetImpl target = new TargetImpl();

ProxyFactory proxy = new ProxyFactory ();

target.addAdvisor(youAdvisor);

target.addAdvice(youAdvice);

TargetImpl  targetproxy = proxy.getProxy();

proxyFactory类的源码如下:
public class ProxyFactory extends ProxyCreatorSupport
{

    public ProxyFactory()
    {
    }

    public ProxyFactory(Object target)
    {
        Assert.notNull(target, "Target object must not be null");
        setInterfaces(ClassUtils.getAllInterfaces(target));
        setTarget(target);
    }

    public ProxyFactory(Class proxyInterfaces[])
    {
        setInterfaces(proxyInterfaces);
    }

    public ProxyFactory(Class proxyInterface, Interceptor interceptor)
    {
        addInterface(proxyInterface);
        addAdvice(interceptor);
    }

    public ProxyFactory(Class proxyInterface, TargetSource targetSource)
    {
        addInterface(proxyInterface);
        setTargetSource(targetSource);
    }

    public Object getProxy()
    {
        return createAopProxy().getProxy();
    }

    public Object getProxy(ClassLoader classLoader)
    {
        return createAopProxy().getProxy(classLoader);
    }

    public static Object getProxy(Class proxyInterface, Interceptor interceptor)
    {
        return (new ProxyFactory(proxyInterface, interceptor)).getProxy();
    }

    public static Object getProxy(Class proxyInterface, TargetSource targetSource)
    {
        return (new ProxyFactory(proxyInterface, targetSource)).getProxy();
    }

    public static Object getProxy(TargetSource targetSource)
    {
        if(targetSource.getTargetClass() == null)
        {
            throw new IllegalArgumentException("Cannot create class proxy for TargetSource with null target class");
        } else
        {
            ProxyFactory proxyFactory = new ProxyFactory();
            proxyFactory.setTargetSource(targetSource);
            proxyFactory.setProxyTargetClass(true);
            return proxyFactory.getProxy();
        }
    }
}
proxyFactory的实现原理与ProxyFactoryBean的实现原理是一样的,只是在最外层的表示形式有所不同,proxyFactory没有使用proxyFactoryBean的IoC封装,而是通过直接继承ProxyCreatorSupport的功能来完成AOP的属性配置。

具体实例
/**
* 具体的拦截器类
*/
public class TestInterceptor implements MethodInterceptor
{
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable
    {
        System.out.print("zhangsan start.....");
        Object retVal = invocation.proceed();
        System.out.print("end");
        return retVal;
    }

}

//具体业务类
public class Loginservice
{
   public void login()
   {
       System.out.println("this is login method");
   }
}

//测试类
public class Test
{
    public static void main(String[] args)
    {
        //具体的业务逻辑
        Loginservice loginservice = new Loginservice();
        //代理工厂
        ProxyFactory pf = new ProxyFactory(loginservice);
        //添加advice
        pf.addAdvice(new TestInterceptor());
        //产生代理对象
        Loginservice lg = (Loginservice) pf.getProxy();
        lg.login();
    }
}

这只是简单的通过编码完成了spring的AOP功能。





分享到:
评论
2 楼 liuwuhen 2015-08-13  
代码还是不错的,头像确实有点
1 楼 西蜀石兰 2015-07-13  
这头像。。。。完全不用看代码了

相关推荐

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...

    第四章:Spring AOP API 设计模式1

    3. **工厂方法模式(Factory Method)**:Spring AOP中的`ProxyFactory`是一个典型的工厂方法模式实现,它根据不同的条件创建不同的代理对象,将实例化推迟到子类,提供了更大的灵活性。 4. **原型模式(Prototype...

    spring-aop.rar_aop1270_spring_spring aop

    Spring AOP的核心类包括`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.framework.ProxyFactory`、`org.springframework.aop.aspectj.autoproxy.AspectJAutoProxyCreator`等。...

    SpringAOP

    最后,通过Spring的ProxyFactory创建代理对象,配置Advice,运行客户端代码,实现了在调用sayHello()前后插入自定义的行为。 需要注意的是,Spring AOP的实现并不局限于Eclipse环境,它可以在任何Java环境中使用。...

    springAOP核心组件分析

    Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它通过预定义的切点(Pointcut)来拦截方法的调用,并将横切关注点(如日志、事务管理等)与业务逻辑分离。本知识点将围绕Spring AOP的核心组件进行分析...

    spring aop

    <bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean"> <value>beforeAdvice <value>afterReturningAdvice ``` 2. **AspectJ**: - 是 Java 社区中最流行且功能...

    第二章:Spring AOP 基础1

    - 使用`org.springframework.aop.framework.ProxyFactory`等接口来手动配置和创建包含通知的代理。 8. **动态代理**: - Spring AOP支持自动动态代理,根据需要创建代理实例。 9. **TargetSource替换**: - ...

    个人用java动态代理模拟实现spring aop

    Java动态代理是Java提供的一种在运行时创建新类型对象的技术,它可以让我们在不修改原有代码的情况下,对方法的调用进行增强,这正是Spring AOP(面向切面编程)的核心思想。Spring AOP通过代理模式实现了对业务逻辑...

    spring-aop-ProxyFactoryBean 源码分析

    在Spring框架中,AOP(面向切面编程)是一个核心特性,它允许我们在不修改代码的情况下,对程序的行为进行统一的管理和控制。`ProxyFactoryBean`是Spring AOP实现中的一个重要类,它用于创建代理对象,使我们能够...

    spring AOP 概念

    - **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...

    aop的详细总结(包含例子)

    5. Weaving(编织):将切面应用到目标对象的过程,Spring AOP在运行时完成这个过程,通过ProxyFactory或ProxyFactoryBean。 二、AOP种类 1. 静态织入:在编译时完成,如AspectJ。 2. 动态织入:运行时进行,Spring...

    Spring AOP 自动代理源码 DefaultAdvisorAutoProxyCreator

    Spring AOP源码02:ProxyFactory Spring AOP源码03:JdkDynamicAopProxy Spring AOP源码04:MethodInvocation 拦截器调用 Spring AOP源码05:DefaultAdvisorAutoProxyCreator Spring期末考压轴题:当Spring AOP遇上...

    如何使用Spring AOP的通知类型及创建通知

    使用`ProxyFactory`或`AopProxyFactoryBean`来创建代理,并将通知添加到代理工厂中。 总结起来,Spring AOP的通知类型提供了灵活的扩展机制,使得我们可以在不修改业务代码的前提下,实现如日志记录、事务管理、...

    SPRING对动态代理的封装

    动态代理是Spring实现AOP功能的关键技术之一,它允许我们无需修改原有代码就能添加额外的功能或行为。这篇博客将深入探讨Spring如何封装动态代理,并介绍相关的核心概念和实现细节。 首先,我们要理解什么是动态...

    Spring5.1中文参考指南.pdf

    - **使用ProxyFactory创建AOP代理**:另一种创建AOP代理的方式。 - **操作被通知的对象**:如何访问被代理的对象。 - **使用auto-proxy功能**:Spring自动代理机制。 - **事务管理** - **事务管理介绍**:...

    spring 总结.pdf

    ### Spring AOP 源码深度剖析 #### 一、Spring AOP 介绍与核心概念 Spring AOP(面向切面编程)是Spring框架提供的一个强大的功能模块,它支持通过预编译方式和运行期动态代理实现AOP。在Spring框架中,AOP的核心...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被通知对象 7.9. 使用“自动代理(autoproxy)”功能 7.9.1. 自动代理bean定义 7.9.1.1. BeanNameAutoProxyCreator 7.9.1.2. DefaultAdvisorAutoProxyCreator ...

    Spring笔记(第七次)1

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,并将这些关注点与应用程序的业务逻辑分离。在本篇笔记中,我们将深入探讨Spring AOP的核心流程,特别是在目标方法执行时的拦截...

    Spring_0300_JDKProxy

    在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以用来创建JDK代理对象。 下面是一段简单的示例代码,展示了如何使用Spring的JDK动态代理...

    spring3.x的读书笔记-4

    Spring AOP 是 Spring 框架中的一个核心特性,它实现了面向切面编程(AOP)的概念,使得开发者能够方便地处理系统中的横切关注点,例如事务管理、日志记录、性能监控等。AOP 的核心概念包括连接点、切点、增强、目标...

Global site tag (gtag.js) - Google Analytics