【问题标题】:@Scope ( INTERFACES ) equivalent for XML@Scope ( INTERFACES ) 等效于 XML
【发布时间】:2011-11-14 15:06:43
【问题描述】:

我正在尝试在旧式 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”所需的类型 [a.b.c.MyInterface]:找不到匹配的编辑器或转换策略

有什么想法吗? 谢谢!

【问题讨论】:

    标签: xml spring annotations scope request


    【解决方案1】:

    这就是我最终得到它的方法。 skaffman 挖得很近:

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

    【讨论】:

      【解决方案2】:

      这对我有用:

      定义你的 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>
      

      仅此而已!

      我希望这有用!

      最好的问候!

      【讨论】:

      【解决方案3】:

      首先,您的 XML 示例似乎不等同于 Java 版本 - 对 connectionRepository().getPrimaryConnection 的调用在哪里?唉,错误消息指的是属性myBean,而您已经用该名称定义了一个bean,而不是属性。我想知道您的错误消息是真的来自那个 XML 片段,还是来自另一个片段。

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

      尝试省略class,只留下factory-bean="myFactory" factory-method="create"。 Spring 会根据工厂方法的返回类型来推断你的 bean 的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-09-08
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多