크게 목차는 아래와 같다.
먼저 간단히 적용된 DI 도식화한 그림이다.
변경에 유리한 코드로 사용하기 위해서이다.
@Component("superEngine") // 이름 설정
// 위, 아래 결과 똑같음
@Component // 이름 생략
class SurperEngine extends Engine {}
서브패키지
까지 검색 가능<context:component-scan base-package="com.devcamp.eztour"/>
메타 애너테이션
) 애너테이션 적용된 모든 클래스를 찾은 후 Map 형성
[위 표는 여행사 프로젝트의 후기 게시판 component bean 등록된 Map 테이블]
[적용 후]
<bean id="superEngine" class="com.fastcampus.ch3.SuperEngine"/>
@Component("superEngine")
class SuperEngine extends Engine{}
[적용 전]
@Component
class SuperEngine extends Engine{}
byTpye
으로 타입
먼저 검색 후 자동 객체 연결동일한 타입
이라면 이름 검색 후 자동 객체 연결후기 게시판 component bean 의 Map에 저장된 객체 중 @Autowired 가 적용됐는지 검색 후 타입이 맞다면 자동 연결
RvwController(후기 게시판 Controller)
@Controller
public class RvwController {
@Autowired RvwService rvwService;
@Autowired RvwLkAdmService rvwLkAdmService;
}
RvwService(후기 게시판 Service)
@Service
public class RvwServiceImpl implements RvwService {
@Autowired
RvwDao rvwDao;
}
RvwDao(후기 게시판 Repository)
RvwLkAdmService(후기 좋아요 기능 Service)
RvwLkAdmDao(후기 좋아요 기능 Repository)
기존의 자바의 객체 생성이라는 중복된 코드를 사용하지 않아도 됨.
특히 이 bean 등록 하나만 해주면 애너테이션에 의해서 코드 결합을 줄이고 재활용성이 있어 쓰는 측면에 더 동의한다.
다만, 이번 프로젝트는 실서비스도 아니고 규모가 큰 프로젝트는 아니여서 단점을 못 느꼈지만 단점은 있다.
여기서 런타임 패널티는 각 클래스마다 애너테이션를 찾는 것에 의해서 런타임 패널티가 발생한다고 정확하지는 않지만 이러한 이유로 발생하는 거 같다.