gpt4 book ai didi

java - 如何在 Spring 连接代理对象?

转载 作者:行者123 更新时间:2023-12-04 06:36:59 25 4
gpt4 key购买 nike

我正在使用带有属性可选传输协议(protocol)的代理 bean。我的问题是无法转换bean属性,但我真的不知道为什么。这是这种情况:

我的属性(property):service.protocol=rmi

<!-- This is the 'multiplexing' factory bean (using this because properties
cannot be used in bean names and aliases -->

<bean name="dbFormGenWindowComponent"
class="org.springframework.beans.factory.config.BeanReferenceFactoryBean">
<property name="targetBeanName" value="dbFormGenWindowComponent-${service.protocol}invoker" />
</bean>

<!-- Here are the service invoker beans with two protocols: -->

<bean name="dbFormGenWindowComponent-rmiinvoker" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="${ringwindow.serviceURL.rmi}/${ringwindow.service.name}-dbFormGenWindowComponent"/>
<property name="serviceInterface" value="foo.bar.service.formgen.windows.FormGenWindowComponent" />
<property name="lookupStubOnStartup" value="false"/>
</bean>



启动时的异常是:

org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy541] to required type [foo.bar.service.formgen.windows.FormGenWindowComponent] for property 'formGenWindowComponent'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy541] to required type [foo.bar.service.formgen.windows.FormGenWindowComponent] for property 'formGenWindowComponent': no matching editors or conversion strategy found



我认为嵌套的工厂 bean 应该可以正常工作。您知道如何完成这项工作吗?

最佳答案

当您将注入(inject)点类型定义为具体类而不是接口(interface)时,通常会发生这种情况,但是您基于接口(interface)进行代理。例如:

public interface Foo { .. }
public class FooImpl { .. } // this is declared as bean

public class Bar {
private FooImpl foo; // this fails
private Foo foo; // correct way
}

在工厂 bean 的情况下,这可能是由于工厂 bean 的返回类型被定义为具体类。如果您无法更改类中的任何内容,则可以通过以下方式将 spring 配置为使用 cglib-proxying:
  • <aop:scoped-proxy> - 在 bean 定义中 - 这将配置 bean 的代理
  • <aop:aspectj-autoproxy proxy-target-class="true"> - 全局更改
  • 关于java - 如何在 Spring 连接代理对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761337/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com