스프링 설정 클래스와 컴포넌트 스캔

@Configuration이란

@Configuration
public class AppConfig {

    @Bean
    public OrderService orderService() {
        return new OrderService(orderRepository());
    }

    @Bean
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }
}

@Bean을 이용한 빈 수동 등록

Pasted image 20260514231320.png

@Configuration
public class AppConfig {

    @Bean
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }
}
@Configuration
public class AppConfig {

    @Bean(name = "jdbcOrderRepository")
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }
}

@Configuration
public class ExternalConfig {

    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper();
    }
}

컴포넌트 스캔

Pasted image 20260514231915.png

@Component
public class OrderService {

    private final OrderRepository orderRepository;

    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }
}
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

@ComponentScan 동작 원리

@Configuration
@ComponentScan(basePackages = "com.example.order")
public class AppConfig {
}
@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Component  
public @interface Service {  
  
@AliasFor(annotation = Component.class)  
String value() default "";  
}
@Service("orderServiceV1")
public class OrderService {
}

@Component, @Service, @Repository, @Controller


@Component
public class AppBeans {

    @Bean
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }
}
@Component
public class AppBeans {

    @Bean
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }

    @Bean
    public OrderService orderService() {
        return new OrderService(orderRepository());
    }
}

Pasted image 20260603143450.png

@Component
public class AppBeans {

    @Bean
    public OrderRepository orderRepository() {
        return new JdbcOrderRepository();
    }

    @Bean
    public OrderService orderService(OrderRepository orderRepository) {
        return new OrderService(orderRepository);
    }
}

댓글