Основанные на аннотации методы factory
Я хочу, чтобы автоопределить синглтон bean (foo
)
@Component
public class FooUser {
@Autowire Foo foo;
}
созданный другим методом singleton (FooFactory.createFoo
)
@Service
public class FooFactory {
public Foo createFoo() {...}
}
с xml это просто factory-method
. Как я могу сделать это с помощью аннотации?
Ответы
Ответ 1
Попробуйте 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();
}
}
Ответ 2
Вам нужна java-config - аннотация @Bean
.
Определите свой класс как @Configuration
и ваш метод как @Bean
Ответ 3
Spring Компоненты также могут определять методы factory. Отрезано из документации:
@Component
public class FactoryMethodComponent {
@Bean @Qualifier("public")
public TestBean publicInstance() {
return new TestBean("publicInstance");
}
public void doWork() {
// Component method implementation omitted
}
}
Ответ 4
используйте интерфейс FactoryBean Spring. то u будет иметь возможность самостоятельно autwire T
EDIT:
BeanFactory - это интерфейс в Spring, если вы его реализуете. Вы можете сделать factory объекта, например:
public class FooFactoryBean implements FactoryBean<Foo>{
..................
}
то вы можете инициализировать bean:
@Bean
public FooFactoryBean foo(){
return new FooFactoryBean();
}
то, если вы автоопределили Foo, то Spring поймет, что FooFactoryBean - это желаемый factory
@Autowired
Foo foo;