Есть ли в SpringBoot какой-то механизм для упрощения заводской инъекции?

Заводской впрыск весной

//XML
<bean id = "bar" factory-bean = "barFactory" factory-method = "getInstance"/>
//Java

Как вы делаете внедрение зависимостей только с интерфейсами и фабричными классами и без классов конфигурации?

//Service
public interface MyService {
    void doSomething();
}

//ServiceFactory
public class MyServiceFactory {
    MyService getInstance() {
        //...
    }
}

//Controller
@Controller
public class MyController {
    @Autowired
    private MyService myService;
}

как насчет добавления аннотации конфигурации в класс MyServiceFactory?

Joonseo Lee 13.02.2023 04:54

Почему бы не добавить @Service и/или @Component к фабрике? Тогда вам не нужно использовать конфигурацию XML.

Mark Rotteveel 13.02.2023 10:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
66
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы можете сделать это, не добавляя кодировку xml.

@Configuration
public class MyServiceFactory {

    @Bean
    MyService myService() {
        return new MyService() {
                @Override
                public void doSomething() {
                    
                }
            }
    }
}
@Controller
public class MyController {
    @Autowired
    private MyService myService;

    public void execute() {
        myService.doSomething();
    }
}

Вы можете вручную попросить Spring сделать это автоматически.

Пусть ваша фабрика реализует ApplicationContextAware. Затем предоставьте следующую реализацию на своей фабрике:@Override public void setApplicationContext(final ApplicationContext applicationContext) { this.applicationContext = applicationContext; }

а затем выполните следующие действия после создания компонента:

YourBean bean = new YourBean();
applicationContext.getAutowireCapableBeanFactory().autowireBean(bean);
bean.init(); //If it has an init() method.

Другие вопросы по теме