XMl설정 및 annotation
: 자동으로 의존객체를 주입하는 기능
명시적인 언급없이도 Bean이 주입되는 기능
XML방식은 의존관계 파악이 용이하지만 너무 많아지면 힘들어요!
Auto-wiring의 3가지 방식
1) XML에서 autowire="byname" (bean 속성)
이런 속성 추가시 자동으로 연결
이름으로 의존성주입
2) XML에서 autowire="byType(class type임)"
속성 추가 시 자동연결. Bean의 자료형을 이용해서 연결하는 방식
3) @autowired라는 annotation이용(byType을 기반으로 주입)
1) @component
: class에 설정하고 해당 클래스의 instance가 해당 class에 자동으로 bean 등록
xml에서는 각 bean에 대한 id를 직접 설정했는데
<bean id="myFoo" class=".....myFoo />
component는 bean의 이름을 아이디로 사용(id 첫글자는 소문자임)
@Componet("myFoo")
사용하면 다음과 같은 명시적 <bean>설정 생략 가능
Annotation설정을 하려면 XML에 특정한 코드를 넣어야 해요
2) @Autowired
: 자동으로 dependency 설정하기 위해 사용
class에 붙을 수 있어요
field에 붙을 수 있어요
method에 붙을 수 있어요(일반적으로 setter를 지향. 하지만 일반 method도 붙을 수 있어요)
type을 이용해서 설정
//동일한 Data type을 가지는 객체를 주입
//만약 같은 타입이 2개 이상 - field, patameter이름으로 주입
3) @Qualifier
: Autowired랑 같이 많이 써요.
타입이 같은 상태에서 bean의 이름을 가지고,
자동 주입 가능한 의존 객체가 여러개 존재할 때, 특정객체를 선택하도록 지정
2) @Resource
: 자동주입하는거 Autowired랑 기능은 같음
단, @Resource
는 byName
을 이용해서 자동주입을 함
(하지만 Autowired를 주로 많이 씀)
@Autowired
연습해보자
@Autowired(requied=false)
자동 주입하는데 꼭 필요하진 않다
@Autowired를 적용할 수 있는곳 3가지
constrctor
:Autowired사용 가능한지 확인해보자
field
:(setter를 거치는지 확인해보자!)
method)
: Autowired거칠떄
setter를 거치는지 확인해보자!
3) @scope
: 기본값은 싱글톤. 해당 빈을 prototype으로 바꾸려면 scope("prototype")를 클래스 위 @component하단에 지정해주자