弹簧3@Component和静态工厂方法

2022-09-03 05:39:36

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

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

答案 1

恐怕你现在做不到这一点。但是,使用Java配置非常简单:

@Configuration
public class Conf {

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

}

在这种情况下,不需要任何Spring注释。当然,你可以使用好的OL'XML来代替。MyStaticFactory


答案 2

您需要使用弹簧接口。FactoryBean

接口由其本身是工厂的对象使用的对象实现。如果 Bean 实现此接口,则它被用作要公开的对象的工厂,而不是直接用作将自身公开的 Bean 实例。BeanFactory

实现接口并为其声明一个 Bean。例如:

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

通过和组件扫描,将发现此类。Spring 将检测到它是一个,并将您返回的对象显示为 bean(如果您指定它,则为单例)。@ComponentFactoryBeangetObject

或者,可以为此类提供 或 声明。@Bean<bean>FactoryBean


推荐