의존성 주입의 유형 3가지
생성자 기반, 수정자 기반, 필드 기반이 있다
@Component
class YourBusinessClass{
}
@Component
class Dependency1{
}
@Component
class Dependency2{
}
@Configuration
@ComponentScan
public class DepInjectionLauncherApplication {
public static void main(String[] args) {
try (var context =
new AnnotationConfigApplicationContext
(DepInjectionLauncherApplication.class)) {
Arrays.stream(context.getBeanDefinitionNames())
.forEach(System.out::println);
}
}
}
클래스에 @Component 어노테이션을 붙여서 사용자가 만든 클래스를 빈으로 가져오고
메인에서는 추가 인자가 없는 @ComponentScan 어노테이션으로 현재 패키지에서 가져온 빈을 출력했다
이 상태로는 의존성 주입이 되지 않는다, 밑에서 의존성 주입을 해보자
필드 주입
@Component
class YourBusinessClass{
@Autowired
Dependency1 dependency1;
@Autowired
Dependency2 dependency2;
public String toString() {
return "using " + dependency1 + " and " + dependency2 ;
}
}
필드에 바로 @Autowired 어노테이션을 사용하면 의존성을 주입해서 가져올 수 있다
이렇게 사용하는 방법은 생성자나 수정자가 없는 필드 주입이고, 테스트 코드가 아니면 사용을 권장하지 않는다
수정자 주입
@Component
class YourBusinessClass{
Dependency1 dependency1;
Dependency2 dependency2;
@Autowired
public void setDependency1(Dependency1 dependency1) {
this.dependency1 = dependency1;
}
@Autowired
public void setDependency2(Dependency2 dependency2) {
this.dependency2 = dependency2;
}
public String toString() {
return "using " + dependency1 + " and " + dependency2 ;
}
}
setter 부분에 @AutoWired 어노테이션을 이용해서 수정자 주입을 했다
생성자 주입
@Component
class YourBusinessClass{
Dependency1 dependency1;
Dependency2 dependency2;
@Autowired
public YourBusinessClass(Dependency1 dependency1, Dependency2 dependency2) {
this.dependency1 = dependency1;
this.dependency2 = dependency2;
}
public String toString() {
return "using " + dependency1 + " and " + dependency2 ;
}
}
생성자를 만들때 @Autowired로 의존성 주입이 되게 했다
@Autowired가 없어도 모든 의존성을 가지고 생성자를 만들면, 여기서는 dep1, dep2 를 가지고 만들면
스프링에서 지원하기에 생성자 주입이 된다
모든 빈의 초기화가 하나의 메서드에서 가능하고, autowired를 사용하지 않을 수도 있는 생성자 주입을 사용하자
'유데미 스프링' 카테고리의 다른 글
PostConstruct, PreDestroy (0) | 2024.03.20 |
---|---|
싱글톤, 프로토타입 (0) | 2024.03.20 |
지연 초기화, 즉시 초기화 (0) | 2024.03.20 |
스프링 용어 정리 (0) | 2024.02.25 |
Configuration , Bean, 컨테이너, 빈 연결 우선순위 (0) | 2024.02.19 |