@Scope (INTERFACES) эквивалент для XML - PullRequest
2 голосов
/ 14 ноября 2011

Я пытаюсь сделать это (код) в старой школе 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.Springorg.springframework.aop.framework.Advised] для требуемого типа [abcMyInterface] для свойства 'myBean': не найдены подходящие редакторы или стратегия преобразования

Есть идеи?Спасибо!

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

Вот как я наконец-то заработал. Скаффман копал очень близко:

<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 голос
/ 27 августа 2015

это работает для меня:

Определите свой боб:

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 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>

И это все!

Надеюсь, это полезно!

С наилучшими пожеланиями!

0 голосов
/ 15 ноября 2011

Во-первых, ваш пример XML, похоже, не эквивалентен версии Java - где вызов connectionRepository().getPrimaryConnection?Alaos, сообщение об ошибке относится к свойству myBean, тогда как вы определили бин по этому имени, а не по свойству.Мне интересно, действительно ли ваше сообщение об ошибке пришло из этого фрагмента XML или другого.* и factory-method все одновременно.Обычно вы указываете только два из них, а не все 3.

Попробуйте опустить class, просто оставив factory-bean="myFactory" factory-method="create".Spring определит тип вашего компонента из типа возврата фабричного метода.

...