WebServer/Spring

[Spring] 의존성 주입(DI, Dependency Injection) - ② 어노테이션 설정

gangintheremark 2023. 9. 12. 20:35
728x90

빈과 빈 사이의 의존관계를 처리하는 방식으로 ① XML 설정, ② 어노테이션 설정, ③ JAVA 설정 방식을 이용할 수 있다.

 

[Spring] 의존성 주입 (DI, Dependency Injection) - ① XML 설정

의존성 주입(DI, Dependency Injection) 의존성은 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것을 의미한다. 의존성과 주입을 결합해서 생각하면 '객체가 필요한 특정 객체를 외부에서 밀어

gangintheremark.tistory.com

② 어노테이션(annotation) 기반 설정

  • <context:annotation-config/> 설정 필수
  • Namespaces 에서 context 체크 필수

@Autowired

@Autowired는 스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 표시

  • 주입받는 대상을 타입 type으로 찾아서 자동으로 주입
  • 주입해야 되는 빈의 타입은 반드시 존재해야 한다.
  • 동일한 타입의 빈이 여러 개 있는 경우 예외 발생

CoC (Convention over Configuration)

@Autowired
Cat cat;

Bean Configuration xml file 에 변수명 cat과 일치하는 id를 가진 빈이 주입

 

@Qualifier

  • @Autowired와 같이 사용
  • 동일한 타입의 빈이 여러 개 있는 경우 예외 발생 ➜ 명시적으로 설정 가능
@Autowired
@Qualifier(value="cat")
Cat cat;

 

@Resourse

  • 빈의 이름 name으로 찾아서 자동으로 주입
@Resource(name="cat1")
Cat cat; 
// id="cat1"인 빈 주입

 

@Value

  • 빈의 변수에 특정 값을 주입
  • 주로 외부의 리소스환경정보 값을 가져와서 설정하는 작업이 일반적
# application.properties
cat.name = "애용"
cat.age = 3
<!-- Bean Configuration xml file -->
<context:annotation-config />
<context:property-placeholder location="classpath:com/config/application.properties" 
file-encoding="utf-8"/>
<bean id="cat" class="com.dto.Cat">
// Cat.java
@Value("${cat.name}")
String name;

@Value("${cat.age}")
int age;
728x90