xml을 최소화하여 문제 해결해보기
[ ❗ 생각의 흐름 잡기 ]
- <bean> 태그가 존재한다.
- new를 했네?
- new를 했으니 기본생성자가 있어야 하네?
삼성 TV, 엘지 TV 모두 기본 생성자를 만들어준다.
public SamsungTV() {
System.out.println("삼성TV 기본생성자 호출");
}
[ 삼성 리모콘과 엘지 리모콘 DI하기 ]
[ ❗ 생각의 흐름 잡기 ]
- 파일 확인해보니 LG는 setter가 있네?
- applicationContext.xml에 <bean>을 통해 LG DI해주기
<bean class="test.LgTV" id="lgTV">
<property name="remote" ref="lgRemote" />
</bean>
- property는 setter로 의존성을 주입할 때 이용한다.
- property 태그는 LgTV 객체에 remote라는 setter가 있을거고, 그 setter에 lgRemote라는 이름의 Bean을 주입하겠다는 뜻.
- 이때 ref="lgRemote"는 이미 스프링 컨테이너에 등록되어 있는 Bean ID를 참조해야 함.
- 즉, <bean id ="LgRemote" id="..">라는 형식으로 이미 객체가 생성되고 등록되어있어야 함
- 그렇지 않으면 참고할 Bean의 이름을 찾지 못해서 에러 발생
우선 이렇게 하면 삼성 TV에 삼성 리모컨, 엘지 TV에 엘지 리모컨 꽂아준 상태
DI는 완료되었지만 XML 코드가 너무 많음! XML 코드를 줄여보자
[ XML 최소화 하기 ⇒ “어노테이션으로 대체하자!” ]
- 생성자 주입하고 있는 삼성TV XML 줄이기
이 코드를 지운 후에 삼성 TV 자바 코드에서 “@Autowired 추가하기”
@Autowired로 대체하면 의존성 주입이 그냥 된다!
다만 Autowired를 사용하려면 “new”가 진행된 상태여야 함.
[ 2. new 하는 Bean도 줄이기 ]
이 코드는 new 하고 있는 Bean인데 이것도 없앨 수 있다.
@Component로 대체하면 new가 된다!
+) @Autowired 할 때는 객체의 자료형을 보기 때문에 @Component에 이름을 정해줄 필요가 없다.
+) 대부분의 bean 태그는 어노테이션으로 대체 가능하지만 안되는 것도 있다
+) LookUp 대상(사용자가 불러서 찾을 대상)에는 @Component에 이름(객체명)이 꼭 있어야 한다.
'웹 개발' 카테고리의 다른 글
web.xml, applicationContext.xml (0) | 2025.04.20 |
---|---|
DB 이관 (0) | 2025.04.19 |
[Spring] 1일차 (0) | 2025.04.16 |
싱글톤 패턴이란? (0) | 2025.04.15 |
중간 프로젝트 - 테이블 정규화 및 반정규화 (0) | 2025.04.12 |