TEL:400-8793-956
当前位置:开发工具

如何使用spring生成接口的代理对象并使其可注入?

提问者: 近期获赞: 浏览人数: 发布时间:2021-03-16 08:28:23

 问:我有一个界面

 
interface MyInterface {
    @MyAnnotation
    void myMethod();
}
该接口尚未实现,我不想一一编写实现。
我们想使用spring的技术来动态生成。
然后另一个类注入接口
 
class Test {
    @Autowired MyInterface proxy;
    
    public void test() {
        proxy.myMethod();
    }
}
如何实现和配置呢?
 
Spring数据JPA是以这种方式实现的,但是我不理解源代码。我希望提供一个简单的实现
 
我在下面编写了一个实现,但是需要由代理实现的每个接口都需要手动编写一个create bean方法。
有没有一种方法可以直接扫描包和注释并自动创建bean,例如spring data JPA?
 
 
答:我自己做了一个实现
 
@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方法。
有没有一种方法可以直接扫描包和注释并自动创建bean,例如spring data JPA?
 
可以通过BeanFactoryPostProcessor在春季动态添加豆子
上一篇: 刷新页面间隔出现412
下一篇: Chrome插件无法在离线页面上运行(文件:/ / *)?如何启动插件?