1. Com.springsource.javax.activation : Spring java-mail
2. Com.springsource.javax.mail : Spring java-mail
3. Com.springsource.junit : junit
4. Commons-logging : Spring-context가 사용
5. Mail : java-mail
6. Mockito : 목 프레임워크 중 Mockito
7. Mysql-connector : Mysql JDBC
8. Org.springframework.context.support : Spring java-mail
9. Spring-aop : 스프링 기능 자체의 aop
10. Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함
11. Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.
12. Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.
13. Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar
14. Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.
15. Spring-jdbc : 스프링이 지원하는 jdbc.
16. Spring-test.jar
- @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.
- SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스
- @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일
17. Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션
* 리플렉션
> 자바의 코드 자체를 추상화(Class)해서 접근하도록 만든 것
> 클래스 코드의 메타정보를 가져오거나, 오브젝트 조작 가능.
- 메타정보
1) 클래스 이름은 무엇인지? 어떤 클래스를 상속하는지? 어떤 인터페이스를 사용?
2) 어떤 필드를 가지고 있고, 각각의 타입이 무엇인지
3) 메소드는 어떤 것이 있고, 메소드의 파라미터와 리턴 타입은 무엇인지?
- 오브젝트 조작
1) 오브젝트 필드의 값을 읽고 수정
2) 원하는 파라미터 값을 이용해 메소드를 호출
> 더 자세한 내용은 java.lang.reflect 자바문서를 참조
* String 클래스의 메소드 호출 방식과 Method를 이용해 리플렉션 방식으로 호출하는 방법
17. Class 타입의 오브젝트를 가져오는 법. 스트링이 가진 메소드 중 “length” 라는 이름을 갖고 있고, 파라미터는 없는 메소드의 정보를 가져오는 것.
> 자바의 모든 클래스는 그 클래스 자체의 구성정보를 담은 Class 타입의 오브젝트를 하나씩 가지고 있다.
> 클래스이름.class (17, 26라인)
> getClass() : 18~19라인
> Class.forName() : 27~29라인
21. Method 인터페이스의 invoke() 사용시 대상 메소드 실행(Object 타입으로 리턴옴 아래 스샷 확인)
프록시(타깃과 같은 인터페이스로 구현체, 클라이언트가 실제 대상인 것처럼 위장한 오브젝트)를 적용할 인터페이스
타깃 클래스
데코레이터 패턴 : HelloTarget 부가기능 추가. 문자를 전부 대문자로 바꿔주는 것.
> 대문자로 출력이 필요한 경우를 위해 HelloUppercase 프록시 생성
4~7. Hello 타입의 타깃 오브젝트를 DI 받기 위함.
* 위임과 기능 부가라는 두 가지 프록시의 기능을 모두 처리하는 프록시 클래스
* 데코레이터 패턴 프록시의 문제점
> 인터페이스의 모든 메소드를 구현해 위임하도록 코드를 만들어야함
> 부가기능인 리턴 값을 대문자로 바꾸는 기능이 중복돼서 나타난다.
14~17. 타깃 클래스에 대한 테스트
20~23. 프록시를 통해 타깃 오브젝트에 접근
Class<?> : JDK1.5 제네릭스 오브젝트 타입으로 받을 수 있다. Class<T> 는 타입으로 받기 때문에 안됨
'스프링' 카테고리의 다른 글
[spring] aop 트랜잭션_JDK다이내믹 프록시_3 (0) | 2020.11.30 |
---|---|
[spring] aop_다이내믹프록시_리플렉션_2 (0) | 2020.11.30 |
[spring] aop_목프레임워크_0 (0) | 2020.11.23 |
[MODEL1] JDBC 커넥션 클래식한 방법(JAVA) (0) | 2020.11.12 |
AOP 트랜잭션기초2 고립된테스트 STUB MOCK 단위 통합테스트 (0) | 2020.11.11 |