[Spring] Bean 등록과 의존성 주입(DI) 설정 - Java Config 방식
by 우와한개발자
1. Bean 등록
- @Configuration 어노테이션을 붙인 자바 클래스에서 @Bean으로 직접 Bean을 등록하는 방식.
- 타입 안정성이 높고 복잡한 설정에 유리함.
- 일반적으로 Java Config 파일은 .config 패키지에 넣는게 좋음
- 스프링 부트 기반 프로젝트에서 Java Config 방식과 어노테이션 방식이 많이 사용됨
| 어노테이션 | 용도 | 패키지 |
| @Configuration | Bean 설정 클래스 선언 | org.springframework.context.annotation.Configuration |
| @Bean | 메서드 반환 객체를 Bean으로 등록 | org.springframework.context.annotation.Bean |
| @ComponentScan | 지정 패키지에서 Bean 자동 스캔 | org.springframework.context.annotation.ComponentScan |
| @ImportResource | XML 설정파일을 Java Config에서 import | org.springframework.context.annotation.ImportResource |
1) @Configuration과 @Bean
- @Bean 어노테이션이 붙은 메서드의 이름이 Bean의 이름(XML에서 <bean>태그의 id값)이 됨
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() { /
return new MemberService();
}
}
2) @ImportResource
- XML 설정파일 함께 사용
- Java Config를 메인으로 쓰면서 기존 XML 설정파일도 함께 사용해야 할 때 씀
- 레거시 프로젝트를 Java Config로 점진적으로 전환할 때 유용함
@Configuration
@ImportResource("classpath:applicationContext.xml") // XML 설정파일 import
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService();
}
}
<!-- applicationContext.xml -->
<beans ...>
<bean id="orderService" class="com.example.OrderService"/>
</beans>
- XML에 등록된 orderService와 Java Config에 등록된 memberService를 스프링 컨테이너가 함께 관리함
3) @ComponentScan
- 지정한 패키지를 스캔해서 @Component, @Service, @Repository, @Controller가 붙은 클래스를 자동으로 Bean으로 등록
- @Bean 메서드 없이 스캔 설정만 해도 됨
@Configuration
@ComponentScan("com.example.myapp")
public class AppConfig {
// 비워도 됨 — @ComponentScan이 해당 패키지를 스캔해서 Bean 자동 등록
}
// com.example.myapp 패키지 안에 있는 클래스들이 자동으로 Bean 등록됨
@Service
public class MemberService { }
@Repository
public class MemberRepository { }
- @Bean과 @ComponentScan을 함께 쓰면 직접 등록한 Bean과 자동 스캔 Bean을 같이 관리할 수 있음.
@Configuration
@ComponentScan("com.example.myapp")
public class AppConfig {
// 외부 라이브러리처럼 @Service 등을 붙일 수 없는 경우 직접 @Bean으로 등록
@Bean
public DataSource dataSource() {
return new HikariDataSource();
}
}
2. 의존성 주입 DI 설정
1) 생성자 주입 방식
- @Bean 메서드에서 직접 생성자를 호출해 주입.
- 되도록 new를 사용하지 말라고 했지만 @Bean은 사용해야함. (단, 한번만 생성함)
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService();
}
@Bean
public OrderService orderService() {
return new OrderService(memberService()); // 생성자 주입
}
}
2) setter 주입 방식
- @Bean 메서드에서 직접 setter를 호출해 주입.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService();
}
@Bean
public OrderService orderService() {
OrderService orderService = new OrderService();
orderService.setMemberService(memberService()); // setter 주입
return orderService;
}
}'프레임워크 > Spring' 카테고리의 다른 글
| [Spring] AOP 적용 – XML 방식 (aop:config, aop:aspect, aop:pointcut, aop:advice 등) (0) | 2026.03.27 |
|---|---|
| [Spring] AOP(관점 지향 프로그래밍)란? – Aspect, Advice, Pointcut, Proxy 정리 (0) | 2026.03.27 |
| [Spring] Bean 등록과 의존성 주입(DI) 설정 - 어노테이션(Annotation) 방식 (0) | 2026.03.27 |
| [Spring] Bean 등록 과 의존성 주입(DI) 설정 - XML 방식 (0) | 2026.03.26 |
| [Spring] Bean과 DI(의존성 주입)란? - Bean 생명주기, 생성자 / setter /필드 주입 정리 (0) | 2026.03.26 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자