自动浇铸弹簧豆

Vin*_*nie 6 java spring casting javabeans

有没有办法将Spring bean自动转换为应用程序上下文XML中定义的类?我想避免在两个位置放置关于bean的类型信息....在xml配置文件中以及在代码中作为强制转换.

例如,给定此配置文件

<bean id="bean-name" class="SimpleSpringBean"  scope="prototype">
    <property name="myValue" value="simple value"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

我可以这样调用ApplicationContext.getBean("bean-name")以避免直接将返回类型转换为SimpleStringBean.我知道我也可以打电话ApplicationContext.getBean("bean-name", SimpleSpringBean.class)来避免演员本身,但我仍然有2个地方的类型信息.

看起来Spring可以获取类info(ApplicationContext.getType)或者从bean本身获取类型,但没有办法在没有程序员干预的情况下自动转换类型.

Lio*_*orH 11

我同意Sii,你应该避免尽可能多地调用getBean.只需将bean连接到依赖于它们的类.

但是,如果您有一个包含应用程序上下文的类,则可以提供如下所示的包装器通用方法:

class MyContextHolder{
    ApplicationContext appContext;
    ......
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName)
    {
        return (T)appContext.getBean(beanName);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以不用强制转换来调用它

MyClass mc = MyContextHolder.getBean("myClassBean");
Run Code Online (Sandbox Code Playgroud)

  • 一个.你遇到了铸造问题b.你的代码依赖于spring框架c.您可能会使用静态方法来访问应用程序上下文,这将降低您的代码可测试性.Spring框架背后的核心思想是依赖注入,如果bean A依赖于bean B,spring可以为你注入依赖,不需要调用getBean (4认同)
  • 为什么调用"getBean"被认为是坏的?你怎么能获得对Spring bean的访问权限? (2认同)