
https://hongjuni.tistory.com/58
[ 제어의 역행 ] IoC - 생성자 인젝션
[ 제어의 역행 ] Inversion of Control 기존 MVC2 패턴에서 insert.do 요청 >> new InsertAction() (FC에서 작성됨) 를 실행하게 되었는데 new InsertAction(req,res); => 인자를 추가하는 순간 FC에서 오류..
hongjuni.tistory.com
https://hongjuni.tistory.com/59
[ 제어의 역핵 ] IoC - Setter 인젝션
IoC의 기본적인 개념 및 흐름은 IoC 생성자 인젝션에서 확인! https://hongjuni.tistory.com/58 > new InsertAction() (FC에서 작성됨) 를 실행하게 되었는데 new InsertAction(req,res); => 인자를 추가하는 순..
hongjuni.tistory.com
위 내용을 간단하게 만들 수 있는 @ (어노테이션) 을 이용해 보자
( applicationContext.xml의 Namespaces )


Context를 설정해 주어야 사용 가능 !!
만약 Namespaces가 존재하지 않다면 위의 코드를 수기로 작성해도 무관하다
Namespaces는 도구일 뿐이다 >> 체크시 해당코드를 자동으로 만들어 줄 뿐
이전에 있던 xml 안에 <bean> 태그나 <property> 태그는 필요가 없어진다!!
어노테이션을 사용해보자
( Galaxy 클래스 )

@Component("사용할객체명")
해당 클래스를 객체화를 해주는 어노테이션 (메모리에 저장된다)
사용할 객체명이 필요없다면 안 사용해도 무관하지만, 주로 사용할 것 같다
Vo vo = new VO();
== <bean id="vo" class="xxx.VO" />
== @Componet("vo")
세가지가 같은 의미를 지닌다
@Autowried
멤버변수 뿐 아니라 메서드, 생성자에도 사용 가능 (대부분 멤버변수에 사용)
해당 멤버변수의 "타입 만"을 체크
메모리를 확인해서 같은 타입을 주입함
메모리에 저장된 타입이 하나라면 괜찮지만
같은 타입이 여러개 저장되어있거나 같은 타입이 존재하지 않다면 오류 발생
@Qualifier("찾을 객체명")
@Autowried를 도와주는 보조 어노테이션
같은 타입의 여러개인 객체를 이용한다면
이름을 지정해 줄수 있음
위 사진에서는 gw = 갤럭시워치 클래스를 찾아 주었다
** 갤럭시워치 클래스에는 @Conponent("gw") 로 객체화하여 메모리에 존재한다
@Autowried의 단점
만약 갤럭시워치가 아닌 애플워치나 오버워치를 가져오고 싶다면 직접 코드로 와서 바꿔야함
-> 다른 객체를 의존주입을 할때 코드로 와야하는 불편함이 있다
그래서 xml 과 @ 을 적절히 섞어 사용하여 해당부분들을 채워줄 수 있게 된다
1) 기존이 있던 @Qualifier을 모두 지운다 >> 객체명을 찾아주는 보조 @ (어노테이션)
2) 워치류 클래스의 @Component를 지운다
1번과 2번을 xml로 해결해보자
( applicationContext.xml )


1번의 @Qualifier 를 제거하고 @Autowired만 남겨놓는다
>> @Autowired의 특성으로 같은타입이 메모리에 존재한다면 알아서 가져온다
2번의 워치류 @Component를 지우고 xml에 <bean>로 생성한다
>> <bean>로 객체화를 하는순간 메모리에는 class="test.AppleWatch" 즉 애플워치가 존재하게 된다
xml의 <bean>으로 생성된 애플워치를 @Autowired가 찾아서 사용하게 되는 것이다
( Client 메인메소드 결과 )

어노테이션과 xml를 적절히 섞어 사용하여 기능을 구현해 보았다
OverWatch나 GalaxyWatch로 바꾸고싶다면
xml의 <bean> class 속성에서 원하는 워치를 적는다면 해당워치로 사용할 수 있게 된다
>> 유지보수에 용이한 코드***가 되었다는 뜻
>> 갤럭시 클래스 코드로 갈 필요없이 xml 파일의 값을 변경하는 것으로
갤럭시 클래스에서 사용하는 워치류를 변경할 수 있게 됨
'Spring' 카테고리의 다른 글
[ 관전지향 프로그래밍 ] AOP (xml설정 ) (0) | 2022.09.15 |
---|---|
[ 제어의 역행 ] 어노테이션을 이용한 Model 관리 (0) | 2022.09.14 |
[ 제어의 역핵 ] IoC - Setter 인젝션 (0) | 2022.09.14 |
[ 제어의 역행 ] IoC - 생성자 인젝션 (0) | 2022.09.14 |
스프링 쓰는 이유 및 간단 개요 (0) | 2022.09.13 |