자동 객체 연결
[다형성 미적용]
변경 포인트 2개
SportCar
car -> Truck
carSportsCar()
; -> new Truck()
;// 변경 전
SportCar car = new SportsCar();
// 변경 후(변경 포인트가 2개)
Truck car = new Truck();
[다형성 적용]
변경 포인트 1개
Class car {}
Class SportsCar extends Car {}
Class Truck extends Car {}
// 변경 전
Car car = new SportsCar();
// 변경 후(변경 포인트가 1개)
Car car = new Truck();
Component Scanning 에 대해서 세부적으로 알고 싶다면 아래 링크 참고
링크
클래스의
상속관계
에 대한 자동 객체 등록클래스의 객체는 조상 객체거나
자손 객체
모두 적용가능하다.
<component-scan>
Bean 추가서브패키지
까지 검색 가능guava
라이브러리 적용해야 component-scan 사용 가능 <context:component-scan base-package="com.devcamp.eztour"/>
메타 애너테이션
) 애너테이션 적용된 모든 클래스를 찾은 후 Map 저장
[위 표는 여행사 프로젝트의 후기 게시판 component bean 등록된 Map 테이블]
@Component("superEngine") // 이름 설정
// 위, 아래 결과 똑같음
@Component // 이름 생략
class SurperEngine extends Engine {}
<component-scan>
로 @Component가 클래스를 자동 검색해서 빈으로 등록!메타 애너테이션
애너테이션을 위한 애너테이션
@Controller, @Service, @Repository, @ControllerAdvice 애너테이션들은 메타 애너테이션인 @Component 적용되어 있음
byTpye
으로 타입
먼저 검색 후 자동 객체 연결동일한 타입
이라면 이름 검색 후 자동 객체 연결RvwController(후기 게시판 Controller)
@Controller
public class RvwController {
@Autowired RvwService rvwService;
@Autowired RvwLkAdmService rvwLkAdmService;
}
이름
으로 빈을 검색 아래 그림과 같이 동일한 결과를 보여주지만, Spring 방식은 @Autowired 이다.
그림에서 보는 거와 같이 0x200(Engine)
, Ox400(Engine)
타입이 동일하지만 map에서의 key(Bean) 이름이 달라 @Resource 를 사용하여 자동 연결할 수 있다.
Class Car {
@Resource(name="engine2") Engine engine;
@Resource Door door;
}
Spring Contanier가 관리하는 자바 객체