Ответ
Spring предлагает несколько стратегий конфигурации, которые можно комбинировать:
-
XML-конфигурация (Legacy/Classic).
- Определение бинов и их зависимостей в файлах
applicationContext.xml.<bean id="myService" class="com.example.MyServiceImpl"> <property name="repository" ref="myRepository"/> </bean>
- Определение бинов и их зависимостей в файлах
-
Конфигурация на аннотациях (Annotation-based).
- Использование стереотипных аннотаций (
@Component,@Service,@Repository,@Controller) для автоматического обнаружения бинов и@Autowiredдля внедрения.@Service public class MyService { @Autowired private MyRepository repository; }
- Использование стереотипных аннотаций (
-
Java-based конфигурация (Предпочтительный современный способ).
- Использование классов, помеченных
@Configuration, где бины определяются методами с аннотацией@Bean. Позволяет сохранить преимущества типобезопасности и рефакторинга.@Configuration public class AppConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); } @Bean public MyService myService(DataSource dataSource) { return new MyService(dataSource); // Constructor Injection } }
- Использование классов, помеченных
-
Конфигурация на свойствах (Properties/YAML) с Spring Boot.
- Внешняя конфигурация через файлы
application.propertiesилиapplication.yml. Управляется аннотацией@ConfigurationProperties.# application.yml spring: datasource: url: jdbc:postgresql://localhost/mydb username: admin
- Внешняя конфигурация через файлы
-
Профили (Profiles).
- Позволяют определять условные бины и конфигурации для разных сред (dev, test, prod) с помощью
@Profile("dev").
- Позволяют определять условные бины и конфигурации для разных сред (dev, test, prod) с помощью
Эволюция: Современные приложения, особенно на Spring Boot, используют комбинацию Java-based конфигурации и конфигурации на свойствах, полностью избегая XML.