问:我有一个界面
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在春季动态添加豆子