java–Spring:委托自定义代理包装器进行接口注入

java–Spring:委托自定义代理包装器进行接口注入,第1张

概述在一个非常大的遗留应用程序中,我有没有实现这些接口的接口和类.接口是基于类生成的,因此签名是相同的(除了接口在顶部添加另一个异常)并且名称相似(因此很容易从接口名称中找到类名).为了获得接口的实现,我们做了一堆处理和记录调用,但基本上使用java.lang.reflect.Proxy委托给类.简化它看起来像这样:// This will create a p

在一个非常大的遗留应用程序中,我有没有实现这些接口的接口和类.

接口是基于类生成的,因此签名是相同的(除了接口在顶部添加另一个异常)并且名称相似(因此很容易从接口名称中找到类名).

为了获得接口的实现,我们做了一堆处理和记录调用,但基本上使用@[email protected]委托给类.简化它看起来像这样:

// This will create a proxy and invoke handler that calls HelloWorld.doSomethingHelloWorldInterface i = MyProxyUtil.getInstance(HelloWorldInterface.class);i.doSomething();public interface HelloWorldInterface {    public voID doSomething() throws Exception;  }public class HelloWorld {    public voID doSomething() {     //something    }}

是否有可能使用Spring注释处理,一般@autowire所有类型*接口的字段并且有春天使用MyProxyUtil.getInstance(* Interface.class)注入实现?

这样

@autowire HelloWorldInterface a;HelloWorldInterface b = MyProxyUtil.getInstance(HelloWorldInterface.class);@autowire AnotherInterface c;AnotherInterface d = MyProxyUtil.getInstance(AnotherInterface.class);a == bc == d
最佳答案是的,您需要实现autowireCandIDateResolver.

例如:

public class ProxyautowiredCandIDateResolver extends SimpleautowireCandIDateResolver {    @OverrIDe    public Object getSuggestedValue(DependencyDescriptor descriptor) {        String dependencyClassname = descriptor.getDependencyType().getSimplename();        if (dependencyClassname.endsWith("Interface")) {            return MyProxyUtil.getInstance(descriptor.getDependencyType());        }        return super.getSuggestedValue(descriptor);    }}

您可以使用beanfactoryPostProcessor在应用程序上下文中配置它:

public class autowireCandIDateResolverConfigurer implements beanfactoryPostProcessor {    private autowireCandIDateResolver autowireCandIDateResolver;    public voID postProcessbeanfactory(            Configurablelistablebeanfactory beanfactory) throws BeansException {        Defaultlistablebeanfactory  bf = (Defaultlistablebeanfactory) beanfactory;        bf.setautowireCandIDateResolver(autowireCandIDateResolver);    }    public autowireCandIDateResolver getautowireCandIDateResolver() {        return autowireCandIDateResolver;    }    public voID setautowireCandIDateResolver(            autowireCandIDateResolver autowireCandIDateResolver) {        this.autowireCandIDateResolver = autowireCandIDateResolver;    }}
总结

以上是内存溢出为你收集整理的java – Spring:委托自定义代理包装器进行接口注入全部内容,希望文章能够帮你解决java – Spring:委托自定义代理包装器进行接口注入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1269337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)