디지털 양피지/WebJava2016. 5. 19. 17:26


Dependency 관리


Constructor Injection

생성자에 Argument가 있을 경우에는 다음과 같이 한다.

Alt+Shift+S를 누르고 


아래와 같이 xml에 추가해준다.

일반적으로 먼저 생성된 클래스가 생성되지만 arg가 존재 할 경우 해당 arg의 클래스 먼저 생성이 된다. 

이것을 Constructor Injection 이라 한다.  생성자 메소드와 컨스트럭트 아



실행 해보면 둘다 Singleton으로 생성이 된다.


Setter Injection

setter Injection은 반드시 첫글자는 소문자 이어야 하고 setXXX의 set을 지운 이름이어야 한다. generation 하는 것을 원칙으로 한다. 반드시 default 생성자가 있어야 한다.




Annotation 기반 설정


Dependency Injection은 Source Level에서 해석이 힘들다. Xml 설정을 해석해야 한다. 

Component Annotation을 이용하여 memory 에 객체 생성한다.


package의 위에서 아래로 순서데로 스캔하고 생성한다.



Annotation은 Component scan에 의해 생성이 되는데 클래스 이름의 첫글자만 소문자로 변경해서 사용한다. 

아이디를 바꾸고 싶으면 @Component("idxxx")로 설정하면 된다. 클래스 아래의 변수 객체들은 @Autowired 를 사용해서 초기화 해 줄 수 있다. 변수위에 설정하여 해당타입의 객체를 찾아서 자동으로 할당한다. Type을 비교해서 Type Injection 이라 한다.


@Autowired 는 Type Injection으로 Type을 구분하므로 객체만 인식한다. 따라서 Speaker와 같은 Interface를 사용하면 문제가 생길 수가 있다. Container는 어떤 객체를 할당할지 결정할 수 없다.

이럴때는 @Qualifier("xxx")를 사용하여 결정해준다.

@Resource(name="XXX") 두개를 합친것이다. 즉, @Autowired와 @Qualifer 를 합친것이다. 하지만 @Resource는 Spring에서 지원하는 Annotation이 아닌 JDK 1.6 이상에서 지원하는 Annotation 이다.

이렇게 사용하지 않고 TV만 Component로 등록하고 필요한 객체를 bean으로 설정하면 된다.

모든걸 다 Annotation에 설정하지 않고 필요한 것만 등록해서 사용하면 된다.

이러한 Component를 상속한 annotation을 사용해 좀더 유지 보수가 쉽게 할 수 있다.

실행 결과는 달다지지 않는다.


@Service: 비지니스 로직을 처리하는 Service 객체

@Repository: 데이터베이스 연동을 처리하는 DAO 객체

@Controller: 사용자의 요청을 제어하는 Controller 객체


자주 사용하는 객체들은 XML에 Bean을 등록해서 사용하는게 좋고, 잘 바뀌지 않는 객체들은 Annotation을 사용해 Scan 하는 것이 일반적이다.



JSTL(JSP Standard Tag Library): JSP 파일에서 if, for, switch 등과 같은 자바 코드를 대체하는 표준 태그

jstl코어 태그는 jsp페이지에서 사용되는 자바의 변수설정, 조건문, 반복문, 출력, 예외처리 등의 코드를 대체하기 위해 제공된다. (웹프로젝트에 JSTL라이브러리 추가 해주어야 함)
코어 태그 라이브러리를 사용하려면 jsp페이지에 다음과 같은 taglib 디렉티브를 추가해야 한다.(http://cafe.naver.com/jjdev/916참조)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  • 변수설정 : set, remove
  • 조건문/반복문 : if, choose, forEach, forTokens
  • 출력 : out
  • 기타 : url, redirect, catch


Posted by 빨간 양말