Подтвердить что ты не робот

Основанные на аннотации методы factory

Я хочу, чтобы автоопределить синглтон bean (foo)

@Component
public class FooUser {

  @Autowire Foo foo;
}

созданный другим методом singleton (FooFactory.createFoo)

@Service
public class FooFactory {

  public Foo createFoo() {...}
}

с xml это просто factory-method. Как я могу сделать это с помощью аннотации?

4b9b3361

Ответ 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;