基于注释的工厂方法

我希望能够自动assembly单个bean( foo

 @Component public class FooUser { @Autowire Foo foo; } 

由另一个单例的方法创建( FooFactory.createFoo

 @Service public class FooFactory { public Foo createFoo() {...} } 

使用xml它只是factory-method 。 我怎么能用注释做到这一点?

请尝试使用Java @Configuration

 @Configuration public class Config { @Bean public FooUser fooUser() { return new FooUser(foo()); } @Bean public FooFactory fooFactory() { return new FooFactory(); } @Bean public Foo foo() { return fooFactory().createFoo(); } } 

你需要java-config – @Bean注释 。

将您的类定义为@Configuration ,将您的方法定义为@Bean

Spring Components也可以定义工厂方法。 从文档中删除:

 @Component public class FactoryMethodComponent { @Bean @Qualifier("public") public TestBean publicInstance() { return new TestBean("publicInstance"); } public void doWork() { // Component method implementation omitted } } 

使用FactoryBean Spring接口。 那么你将能够自动使用T


编辑:BeanFactory是Spring中的一个接口,如果你实现它你可以创建一个对象的工厂,如:

 public class FooFactoryBean implements FactoryBean{ .................. } 

那么你可以初始化bean:

 @Bean public FooFactoryBean foo(){ return new FooFactoryBean(); } 

然后,如果你自动assemblyFoo它Spring会理解FooFactoryBean是所需的工厂

  @Autowired Foo foo;