자바코드가 단순해지는 대신, XML 소스 코드가 복잡해짐
과도한 XML 설정 부담을 줄여줌
@Componet
@Component
@Component("tv")
public class LgTV implements TV{ . . . }
context
사용polymorphism 패키지의 모든 클래스를 스캔
<!-- IoC설정에 Annotation을 적용하기 위한 설정 -->
<context:component-scan base-package="polymorphism"/>
===> LgTV 생성
LgTV---전원 키기
LgTV---소리 올리기
LgTV---소리 내리기
LgTV---전원 끄기
👉
<bean class="polymorphism.SonySpeaker"/>
의 원래 아이디
→ polymorphism.SonySpeaker#0
@Component
→ 클래스 이름의 첫 글자를 소문자로(lgTV
)
→ 아이디를 자동으로 인식해줌
base-package
→ 해당 주소로 시작하는 모든 클래스를 스캔
<context:component-scan base-package="com.pastcampus.biz.user"/>
base-package
로 지정한 패키지로 시작하는 모든 클래스를 스캔 범위에 포함시킴com.pastcampus.biz
, com.pastcampus.biz.user
, com.pastcampus.biz.impl
, com.pastcampus.biz.common
등@Autowired
Type Injection
해당 타입의 객체를 찾아 자동으로 할당, 가장 많이 사용
@Autowired
를 설정한 경우@Component
일 경우@Autowired
implements
하는 AppleSpeak와 SonySpeak에서 @Component
//@Component("tv")
public class LgTV implements TV{
@Autowired
// @Qualifier("apple")
private Speaker speaker;
. . .
}
@Component
는 지우기<!-- 실제로 사용할 Speaker 하나만 등록한다 -->
<bean class="polymorphism.AppleSpeaker"></bean>
<bean id="tv" class="polymorphism.LgTV"></bean>
===> AppleSpeaker 생성
===> LgTV 생성
LgTV---전원 키기
AppleSpeaker---소리 올리기
AppleSpeaker---소리 내리기
LgTV---전원 끄기
@Qualifier
특정 객체 이름 이용하여 의존성 주입 시 사용
@Inject
@Autowired
와 동일한 기능
@Resource
@Autowired
와@Qualifier
기능 결합
👉 유지보수(운영) 과정에서 변경되는 객체는 XML 파일에 <bean>
등록
👉 유지보수(운영) 과정에서 변경되지 않는 객체는 최대한 @Component
를 적용
👉 의존성 주입은 @
@Component
부품처럼 사용할 수 있는 소프트웨어 모듈
모듈
하드웨어 개념
일반적으로 소프트웨어 컴포넌트는 테이블 당 하나씩 작성하며, 테이블에 대한 CRUD 작업을 처리
CRUD
Create(→ Insert), Read(→Select), Update, Delete
가장 먼저 만드는 클래스 Value OBject : VO
Data Access Object : DAO
Service
인터페이스
Service 구현 클래스(Impl
)
전부 @Component
를 붙이면 가독성이 떨어짐
컴포넌트를 세분화한 것
@Service
비즈니스 로직을 처리하는 Service 클래스에 사용
@Service("userService")
public class UserServiceImpl implements UserService { . . . }
@Repository
DB 연동을 처리하는 DAO 클래스에 사용
@Repository
public class UserDAO { . . . }
@Contorller
사용자 요청을 제어하는 Controller 클래스에 사용