오토와이어링(Auto-wiring)

애너테이션이 붙어 있는 객체를 DI컨테이너가 자동으로 의존 컴포넌트를 주입하는 것

 

 

오토와이어링의 종류

@Autowired : 생성자, 메소드, 필드에 적용할 수 있으며 주입할 타입에 해당하는 빈을 DI 컨테이너 안에 찾아 주입해줌. 만약 required 속성에 false를 설정하면 해당 타입의 빈을 찾지 못하더라도 예외가 발생하지 않고 필드값이 null이 됨

@Qualifier : DI 컨테이너에 같은 타입의 빈이 여러개 발견되었을 시 어떤 Bean을 주입할 지 설정

@Primary : Qualifier가 지정되어 있지 않을 경우 우선적으로 선택할 Bean을 지정

@Resource : Qualifier + Autowired. 변수의 타입이 아닌 객체의 이름을 이용하여 의존성 주입을 처리함. name 속성에 주입할 객체의 이름을 작성

 

 

 

Resource 인터페이스

먼저 pom.xml에 롬복 추가

 

 

 

resources에 txt 파일 다음과 같이 적고 저장

 

 

 

User 클래스에 리소스 변수를 넣고, @value() 애너테이션을 사용하여 파일을 찾아 주입. Resource 인터페이스는 어떤 유형의 외부 리소스라도 경로를 지정하면 데이터를 가져올 수 있는 리소스 로드 매커니즘을 제공한다.

 

 

 

 

불러온 모습

 

 

 

'Spring' 카테고리의 다른 글

[Spring] MVC  (0) 2023.08.03
[Spring] 관점 지향 프로그래밍(Aspect Oriented Programming)  (0) 2023.08.02
[Spring] 다국어 메세지 처리하기  (0) 2023.08.02
[Spring] Collection 객체 설정  (0) 2023.08.01
[Spring] Bean 설정  (0) 2023.08.01

MyCollection 클래스에 다음과 같이 필드를 설정하고 getter와 setter를 생성한다.

 

 

 

xml로 가서 Collection객체를 설정, List 타입과 Set 타입은 이와 같이 값을 주입한다.

 

 

 

Map과 Properties 타입은 다음과 같이 값을 주입한다. Map의 <entry>속성으로 하나의 요소를 정의하고, <key>는 말 그대로 key를 정의, <value> 역시 말 그대로 키의 값을 정의한다.

 

Properties 타입은 <probs> 속성을 사용하고 <prop>의 key 속성을 사용하여 key를 정의하고 내부에 value값을 넣는다.

 

 

 

메인에서 출력하면 다음과 같이 출력된다.

 

 

 

 

Bean

스프링이 관리하는 POJO 객체를 의미, <bean>을 정의함으로서 스피링이 관리할 객체를 지정해 줄 수 있음

Bean 설정은 xml 파일 혹은 애너테이션으로 설정 할 수 있음

POJO : 평범한 옛 자바 객체

 

 

예시

먼저 User 클래스와, Computer 클래스를 만들고 필드를 이렇게 지정 후, getter setter, 생성자, ToString을 만든다.

 

 

 

 

AppConfig 클래스를 만든 후, @Configuration 이라는 에너테이션을 붙힌다. 이는 Bean 객체를 관리하는 역할을 할 것이라는 의미를 뜻한다. 각 메서드에 @Bean 애너테이션을 부여해서 빈을 정의한다.  name으로 이름을 설정 가능하고, initMethod를 이용해 초기화 메서드를 이용할 수 있다.

 

 

 

XML로 Bean 객체를 관리할 수 있는데, 값을 넣을 경우에는 value를, 객체를 집어넣을 경우에는 ref 요소를 사용한다. 그리고 lazy-init 요소가 보이는데, 이는 나중에 생성할 Bean 객체라는 것을 의미한다.

 

 

 

Bean을 획득하는 방법.. 먼저 생성한 MyApplication 클래스에 메인을 만들고, 그 안에서 출력을 하려고 한다. 어노테이션에서 불러올 경우와 xml 경로로 불러올 경우가 각각 다르다.

 

 

DI에서 Bean을 가져올 때, 같은 타입의 Bean이 여러개 있을 경우 Bean의 이름과, 타입을 파라미터에 넣는다. 하지만, 지정한 타입에 해당하는 Bean이 오직 하나만 있을 경우 Bean의 이름은 파라미터에 넣지 않아도 된다.

 

 

 

다음과 같이 출력된다. xml-user는 lazy-init = "true"로 설정했기 때문에 context GET 완료 후에 생성된다. 

 

 

 

 

DI 컨테이너에 등록된 빈은 자동으로 Singleton으로 생성된다. 

+ Recent posts