Spring 3 @Component和静态工厂方法

shr*_*000 15 java spring annotations static-factory

如果我正在编写一个静态工厂方法来创建对象,我如何使用该工厂类的'@Component'注释并指示(带有一些注释)静态工厂方法,应该调用该方法来创建该类的bean?以下是我的意思的伪代码:

@Component
class MyStaticFactory
{
    @<some-annotation>
    public static MyObject getObject()
    {
        // code to create/return the instance
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 16

恐怕你目前无法做到这一点.但是,Java配置非常简单:

@Configuration
public class Conf {

    @Bean
    public MyObject myObject() {
        return MyStaticFactory.getObject()
    }

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下MyStaticFactory,不需要任何Spring注释.当然,您可以使用优秀的XML.


小智 7

您需要使用弹簧接口FactoryBean.

BeanFactory本身工厂内使用的对象实现的接口.如果bean实现了这个接口,它将被用作公开的对象的工厂,而不是直接作为将自己公开的bean实例.

实现接口并为它声明一个bean.例如 :

@Component
class MyStaticFactoryFactoryBean implements FactoryBean<MyStaticFactory>
{
    public MyStaticFactory getObject()
        MyStaticFactory.getObject();
    }
    public Class<?> getObjectType() {
        return MyStaticFactory.class;
    }
    public boolean isSingleton() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过@Component和组件扫描,将发现此类.Spring将检测到它是一个FactoryBean并将您getObject作为bean 返回的对象公开(如果您指定了它,则为单例).

或者,您可以为此课程提供@Bean<bean>声明FactoryBean.