Home
>
Spring
>
π[Spring] μΈμ `@Configuration`μ `@Bean`μ ν¨κ» μ¬μ©ν κΉ?
Spring
Framework
π[Spring] μΈμ @Configuration
μ @Bean
μ ν¨κ» μ¬μ©ν κΉ?
-
@Configuration
κ³Ό @Bean
μ ν¨κ» μ¬μ©νλ κ²½μ°λ μλ° κΈ°λ°μ μ€μ ν΄λμ€ λ₯Ό μ μν λμ
λλ€.
- μ΄ λ°©μμ μλμΌλ‘ λΉμ μ μνκ³ μ€μ κ³Όμ μ μΈλ°νκ² μ μ΄νκ³ μ ν λ μ¬μ©λ©λλ€.
- νΉν μΈλΆλΌμ΄λΈλ¬λ¦¬λ νλ μμν¬μμ μ 곡νλ κ°μ²΄λ€μ λΉμΌλ‘ λ±λ‘νκ±°λ, λΉμ μμ±κ³Ό μ΄κΈ°ν κ³Όμ μ 컀μ€ν°λ§μ΄μ§ν΄μΌ ν λ μ μ©ν©λλ€.
1οΈβ£ @Configuration
κ³Ό @Bean
μ ν¨κ» μ¬μ©νλ μ£Όμ μ΄μ .
1. μΈλΆ λΌμ΄λΈλ¬λ¦¬ ν΄λμ€μ λΉ λ±λ‘.
-
@Configuration
κ³Ό @Bean
μ μ¬μ©νλ©΄ μΈλΆ λΌμ΄λΈλ¬λ¦¬μ ν΄λμ€λ, Springμ΄ μ§μ κ΄λ¦¬νμ§ μλ κ°μ²΄λ€μ λΉμΌλ‘ λ±λ‘ν μ μμ΅λλ€.
- Springμ μλ μ€μΊ κΈ°λ₯μ κ°λ°μκ° μμ±ν ν΄λμ€λ§ λμμΌλ‘ νκΈ° λλ¬Έμ, μΈλΆ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ κ°μ²΄λ μλμΌλ‘ λΉμΌλ‘ λ±λ‘ν΄μΌ ν©λλ€.
2. 컀μ€ν
λΉ μ΄κΈ°ν λ° μ€μ .
-
@Bean
μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ©΄ λΉμ΄ μμ±λλ λ°©μμ 컀μ€ν°λ§μ΄μ§ν μ μμ΅λλ€.
- μμ±μ νλΌλ―Έν°, μ΄κΈ°ν κ³Όμ , μμ‘΄μ± μ£Όμ
λ°©μ λ±μ μΈλΆμ μΌλ‘ μ€μ ν μ μμΌλ©°, μ΄ μ€μ μ Java μ½λλ‘ μμ±ν¨μΌλ‘μ¨ XML κΈ°λ° μ€μ μ λ체ν μ μμ΅λλ€.
3. 볡μ‘ν λΉ μμ± λ‘μ§ μ²λ¦¬.
- λΉ μμ± κ³Όμ μ΄ λ³΅μ‘νκ±°λ μ¬λ¬ μμ‘΄μ±μ νμλ‘ ν κ²½μ°,
@Configuration
ν΄λμ€μμ μ΄λ₯Ό μ μ΄ν μ μμ΅λλ€.
- λΉ κ°μ μμ‘΄μ±, νΉμ μν©μ λ°λ₯Έ λΉ μμ± λ‘μ§ λ±μ μλ° μ½λλ‘ λͺ
ννκ² κ΄λ¦¬ν μ μμ΅λλ€.
4. XML μ€μ μ λ체.
- Springμ κ³Όκ±°μ XML κΈ°λ° μ€μ μ μ£Όλ‘ μ¬μ©νμ§λ§,
@Configuration
κ³Ό @Bean
μ μ¬μ©νλ©΄ μ΄λ¬ν μ€μ μ μλ° μ½λλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
- μλ° κΈ°λ° μ€μ μ νμ
μμ μ±μ μ 곡νλ©°, μ½λμ μ€μ μ΄ νλμ νμΌ λ΄μ ν΅ν©λμ΄ μ μ§λ³΄μνκΈ° μ¬μμ§λλ€.
2οΈβ£ μμ
1. μΈλΆ λΌμ΄λΈλ¬λ¦¬ λΉ λ±λ‘
- μλ₯Ό λ€μ΄, μΈλΆ λΌμ΄λΈλ¬λ¦¬μ λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ
ν(
HikariDataSource
)μ λΉμΌλ‘ λ±λ‘νκ³ , μ΄λ₯Ό 컀μ€ν°λ§μ΄μ§νλ κ²½μ°μ
λλ€.
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setMaximumPoolSize(10);
return dataSource;
}
}
-
@Configuration
- μ΄ ν΄λμ€κ° Springμ μ€μ νμΌλ‘ μ¬μ©λλ©°, λΉμ μ μνλ ν΄λμ€μμ λνλ
λλ€.
-
@Bean
- μ΄ λ©μλκ° λ°ννλ
HikariDataSource
κ°μ²΄λ μ€νλ§ μ»¨ν
μ΄λμ λΉμΌλ‘ λ±λ‘λ©λλ€.
- μΈλΆ λΌμ΄λΈλ¬λ¦¬ κ°μ²΄μ΄λ―λ‘ μλ μ€μΊμ΄ λΆκ°λ₯νλ©°, μ΄λ₯Ό μλμΌλ‘ λ±λ‘νλ λ°©μμ
λλ€.
2. 볡μ‘ν λΉ μ΄κΈ°ν
- λ€μμ μλΉμ€ λΉμ΄ μ¬λ¬ κ°μ§ μμ‘΄μ±μ νμλ‘ νκ³ , λΉ μ΄κΈ°ν κ³Όμ μμ νΉμ μ€μ μ΄ νμν κ²½μ°μ
λλ€.
@Configuration
public class AppConfig {
@Bean
public UserService userService(UserRepository userRepository, NotificationService notificationService) {
UserService userService = new UserService(userRepository);
userService.setNotificationService(notificationService); // μΆκ° μ€μ
return userService;
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
@Bean
public NotificationService notificationService() {
return new EmailNotificationService();
}
}
- μ΄ μμμλ
UserService
κ° μ¬λ¬ μμ‘΄μ±μ νμλ‘ νκ³ , νΉμ μΆκ° μ€μ μ΄ νμν μν©μ μ²λ¦¬ν©λλ€.
-
Configuration
: μ ν리μΌμ΄μ
μ μ€μ ν΄λμ€μμ λͺ
μν©λλ€.
-
@Bean
: UserService
, UserRepository
, NotificationService
λ₯Ό λΉμΌλ‘ λ±λ‘νκ³ , μμ‘΄μ±μ μλμΌλ‘ μ£Όμ
νκ³ μΆκ° μ€μ μ ν μ μμ΅λλ€.
3. λΉ κ° μμ‘΄μ± κ΄λ¦¬.
-
@Configuration
ν΄λμ€μμ λΉ κ°μ μμ‘΄μ±μ λͺ
ννκ² κ΄λ¦¬ν μ μμ΅λλ€.
- λ€μμ μ¬λ¬ λΉ κ°μ μμ‘΄μ±μ μ²λ¦¬νλ μμμ
λλ€.
@Configuration
public class ServiceConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
- μ¬κΈ°μ
UserService
λ UserRepository
μ μμ‘΄νλ©°, @Bean
λ©μλλ₯Ό ν΅ν΄ UserRepository
λΉμ μ°Έμ‘°ν©λλ€.
- μ€νλ§μ μ΄λ¬ν μμ‘΄μ±μ μλμΌλ‘ ν΄κ²°νμ¬ λΉμ λ±λ‘ν©λλ€.
3οΈβ£ μΈμ @Configuration
κ³Ό @Bean
μ μ¬μ©ν΄μΌ ν κΉ?
1. μΈλΆ λΌμ΄λΈλ¬λ¦¬ λλ μ€νλ§μ΄ μλμΌλ‘ κ΄λ¦¬νμ§ μλ ν΄λμ€ λ±λ‘
- μΈλΆ λΌμ΄λΈλ¬λ¦¬μ ν΄λμ€λ λ€λ₯Έ νλ μμν¬μμ μ 곡νλ κ°μ²΄λ€μ λΉμΌλ‘ λ±λ‘ν΄μΌ ν λ
@Configuration
κ³Ό @Bean
μ ν¨κ» μ¬μ©ν©λλ€.
2. 볡μ‘ν λΉ μμ± λ‘μ§μ΄ νμν λ
- λΉ μμ± μ μμ‘΄μ± μ£Όμ
μΈμ μΆκ°μ μΈ μ€μ μ΄ νμν κ²½μ°(νΉμ λ©μλ νΈμΆ, κ°μ²΄ μ΄κΈ°ν, μΆκ° μ€μ λ±)
@Bean
μ μ¬μ©νμ¬ μλμΌλ‘ λΉμ μμ±νκ³ , μ΄λ₯Ό 컀μ€ν°λ§μ΄μ§ν μ μμ΅λλ€.
3. λΉ κ°μ λͺ
μμ μμ‘΄μ± κ΄λ¦¬
- μλ‘ μμ‘΄νλ λΉλ€μ΄ μμ λ,
@Configuration
ν΄λμ€μμ λΉμ μμ± μμμ μμ‘΄μ±μ λͺ
μμ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
4. μ μ°ν μ€μ μ΄ νμν λ
- μ ν리μΌμ΄μ
μ€μ μ μλ° μ½λλ‘ κ΄λ¦¬νλ©΄μ, μ‘°κ±΄λΆ λΉ μμ±, νλ‘νμΌ κΈ°λ° λΉ κ΄λ¦¬ λ±κ³Ό κ°μ΄ λ 볡μ‘νκ³ μ μ°ν μ€μ μ΄ νμν λ μ μ©ν©λλ€.
4οΈβ£ κ²°λ‘
-
@Configuration
κ³Ό @Bean
μ μ€νλ§ μ ν리μΌμ΄μ
μμ λΉμ μλμΌλ‘ λ±λ‘νκ³ μ€μ νλ λ°©μμΌλ‘ μ¬μ©λ©λλ€.
- μ΄ λ μ΄λ
Έν
μ΄μ
μ ν¨κ» μ¬μ©ν¨μΌλ‘μ¨ μ€νλ§μ μλ° κΈ°λ°μΌλ‘ λΉμ μμ±νκ³ κ΄λ¦¬ν μ μκ² λλ©°, μΈλΆ λΌμ΄λΈλ¬λ¦¬λ μ€νλ§μ΄ μλμΌλ‘ κ΄λ¦¬νμ§ μλ κ°μ²΄λ€λ λΉμΌλ‘ λ±λ‘ν μ μμ΅λλ€.
- μ΄λ¬ν λ°©μμ νΉν λ 볡μ‘ν λΉ μμ± λ‘μ§μ νμλ‘ νκ±°λ μΈλΆ 리μμ€μμ ν΅ν©μ΄ νμν λ μ μ©ν©λλ€.