如何用Spring生成接口的代理对象并使之可以被注入?

发布于 2022-09-03 14:04:17 字数 541 浏览 13 评论 0

我有一个接口

interface MyInterface {
    @MyAnnotation
    void myMethod();
}

这个接口没有实现,也不想一个个写实现。
实现想用spring下的技术动态生成。

然后有另一个类注入了这个接口

class Test {
    @Autowired MyInterface proxy;
    
    public void test() {
        proxy.myMethod();
    }
}

请问这样子应该如何实现和配置?


Spring Data JPA 就是这样实现的,但我没看懂源码,希望能提供简单的实现


我自己写了个实现在下面,但每个需要代理实现的接口都得手动写一个create bean方法。

有没有像Spring Data JPA那样直接扫描某个包和注解自动创建bean的办法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雨落□心尘 2022-09-10 14:04:17

我自己作了一个实现

@Configuration
public class MyInterfaceImplFactory {
    
    @Bean
    public MyInterface getMyInterface() {
        return getProxy(MyInterface.class);
    }
    
    <T> T getProxy(Class<T> clazz) {
        return (T) Proxy.newProxyInstance(ProxyImpl.class.getClassLoader(), new Class<?>[] {clazz}, new ProxyImpl());
    }
    
    class ProxyImpl implements InvocationHandler {
        
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            MyAnnotation myAnnotation = methdo.getAnnotation(MyAnnotation.class);
            // do something
            return null;
        }
    }
}

但这样做必须每一个要代理实现的接口都得写一个create bean方法。

有没有像Spring Data JPA那样直接扫描某个包和注解自动创建bean的办法?


可以通过BeanFactoryPostProcessor来在spring中动态添加bean

海夕 2022-09-10 14:04:17

用一个类继承接口,便于初始化,然后用aop技术,自动生成那个基本类的代理,这样既可以用xml配置,也可以用注解配置,符合你的要求吗?

客…行舟 2022-09-10 14:04:17

@Autowired 不是动态实现
实现还是要你自己实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文