首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中,ProxyFactory和ProxyFactoryBean有什么区别?

在Spring中,ProxyFactory和ProxyFactoryBean有什么区别?
EN

Stack Overflow用户
提问于 2017-11-04 14:39:26
回答 1查看 2.3K关注 0票数 4

我有以下示例代码:

MyMethodBeforeAdviceImpl.java

代码语言:javascript
复制
import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

public class MyMethodBeforeAdviceImpl implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable {
        System.out.println("MyMethodBeforeAdviceImpl#before");
    }
}

MyService.java

代码语言:javascript
复制
public interface MyService {
    void serve();
}

MyServiceImpl.java

代码语言:javascript
复制
public class MyServiceImpl implements MyService {
    @Override
    public void serve() {
        System.out.println("MyServiceImpl#serve");
    }
}

最后是App.java

代码语言:javascript
复制
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.framework.ProxyFactoryBean;

public class App {
    public static void main(String[] args) {
        final MyServiceImpl myService = new MyServiceImpl();
        final MethodBeforeAdvice myMethodBeforeAdvice = new MyMethodBeforeAdviceImpl();

        final ProxyFactory proxyFactory = new ProxyFactory();
        proxyFactory.addAdvice(myMethodBeforeAdvice);
        proxyFactory.setTarget(myService);

        MyService proxyServiceFromFactory = (MyService) proxyFactory.getProxy();
        proxyServiceFromFactory.serve();

        final ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
        proxyFactoryBean.addAdvice(myMethodBeforeAdvice);
        proxyFactoryBean.setTarget(myService);

        MyService proxyServiceFromFactoryBean = (MyService) proxyFactoryBean.getObject();
        proxyServiceFromFactoryBean.serve();

        System.exit(-1);
    }
}

主要方法的输出如下:

代码语言:javascript
复制
MyMethodBeforeAdviceImpl#before
MyServiceImpl#serve
MyMethodBeforeAdviceImpl#before
MyServiceImpl#serve

因此,就这个非常小的例子而言,它们的作用完全相同。ProxyFactory文档指出:

用于编程使用的AOP代理工厂,而不是通过bean工厂中的声明性设置。该类提供了一种在自定义用户代码中获取和配置AOP代理实例的简单方法。

但在我看来,你还是为了同样的目的而使用ProxyFactoryBean吧?

这两个类是如何达到不同目的的?

EN

回答 1

Stack Overflow用户

发布于 2018-07-21 07:34:25

ProxyFactory独立于Spring的IoC容器。ProxyFactoryBean正在将Spring与Spring的IoC容器结合起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47111867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档