@Scope(INTERFACES)等效于XML

时间:2011-11-14 15:06:44

标签: xml spring annotations scope request

我正在尝试在旧学校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]:找不到匹配的编辑器或转换策略

有什么想法吗? 谢谢!

3 个答案:

答案 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片段,或者是另一个片段。

除此之外,您的问题可能与您同时指定classfactory-beanfactory-method这一事实有关。您通常只指定其中的两个,而不是全部3个。

尝试省略class,离开factory-bean="myFactory" factory-method="create"。 Spring将从工厂方法的返回类型推断出bean的类型。