我正在尝试在旧学校xml中执行此操作(代码)。
@Bean
@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES)
public MyInterface createInterface() {
return connectionRepository().getPrimaryConnection(MyInterface.class);
}
我试过这样做:
<bean id="myBean" class="a.b.c.MyInterface"
factory-bean="myFactory" factory-method="create"
scope="request">
<constructor-arg value="a.b.c.MyInterface"></constructor-arg>
<aop:scoped-proxy proxy-target-class="false"/>
</bean>
但我得到了:
无法转换类型的值[$ Proxy12实现java.io.Serializable,org.springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework。 aop.framework.Advised]为属性'myBean'所需的类型[abcMyInterface]:找不到匹配的编辑器或转换策略
有什么想法吗? 谢谢!
答案 0 :(得分:3)
这是我最终如何运作的方式。斯卡弗曼非常接近:
<bean id="factory"
class="a.b.c.Factory"
scope="request">
</bean>
<bean id="facebook" class="a.b.c.MyInterface"
factory-bean="factory" factory-method="createObject"
scope="request">
<aop:scoped-proxy proxy-target-class="false"/>
</bean>
答案 1 :(得分:1)
这对我有用:
定义你的bean:
package com.bit.impl;
public class MyBeanImpl implements MyBean{
....
....
}
在app-context.xml中添加此代码
<bean id="bean" class="com.bit.impl.MyBeanImpl" scope="session" >
<aop:scoped-proxy />
</bean>
现在,如果要测试bean,则需要添加下一个配置:
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="session">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>
这就是全部!
我希望这很有用!
祝你好运!
答案 2 :(得分:0)
首先,您的XML示例似乎与Java版本不同 - 在哪里调用connectionRepository().getPrimaryConnection
? Alaos,错误消息引用属性myBean
,而您已经按该名称定义了bean,而不是属性。我想知道你的错误信息是否真的来自那个XML片段,或者是另一个片段。
除此之外,您的问题可能与您同时指定class
,factory-bean
和factory-method
这一事实有关。您通常只指定其中的两个,而不是全部3个。
尝试省略class
,离开factory-bean="myFactory" factory-method="create"
。 Spring将从工厂方法的返回类型推断出bean的类型。