본문 바로가기

스프링

[spring] aop_xml방식 네임스페이스_8

1.     Com.springsource.javax.activation : Spring java-mail

2.     Com.springsource.javax.mail : Spring java-mail

3.     Com.springsource.org.aopalliance : Spring ProxyFactoryBean

4.     Com.springsource.org.aspectj.tools : AspectJExpressionPointcut 포인트컷 표현식 지원

5.     Com.springsource.junit : junit

6.     Commons-logging : Spring-context가 사용

7.     Mail : java-mail

8.     Mockito : 목 프레임워크 중 Mockito

9.     Mysql-connector : Mysql JDBC

10.   Org.springframework.context.support : Spring java-mail

11.   Spring-aop : 스프링 기능 자체의 aop, Spring ProxyFactoryBean

12.   Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함

13.   Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.

14.   Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.

15.   Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar

16.   Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.

17.   Spring-jdbc : 스프링이 지원하는 jdbc.

18.   Spring-test.jar

-       @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.

-       SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스

-       @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일

19.   Spring-tx : DuplicateKeyException.class 파일 존재 및 스프링 트랜잭션

 

레벨이 할일은 레벨에게 위임

 

 

User의 일은 User에게 위임

 

 

JDBC, Hibernate, JPA, JDO 등 여러 DataAccess API를 사용하기 위한 인터페이스

 

 

JDBC 구현. 스프링의 JdbcTemplate를 사용할 것이다. 우리가 만든 JdbcContext보다 훨씬 많은 JDBC 사용을 위한 템플릿과 콜백 오브젝트를 제공한다.

 

 

트랜잭션 처리를 위한 데코레이터 패턴 혹은 프록시 적용을 위한 인터페이스

 

 

타겟 오브젝트 구현. 타겟은 프록시 오브젝트가 될 수도 있다.

 

부기기능 어드바이스 구현

 

 

메일서버를 호출하는 과부하 방지를 위한 테스트 스텁 오브젝트 구현.

 

29~31. AOP를 위해 기계적으로 적용하는 빈들(33번 설명 참조)을 간편한 방법으로 등록할 수 있다. 스프링은 AOP와 관련된 태그를 정의해둔 aop 스키마를 제공한다. <bean> 태그와 구분해서 사용할 수 있다.

4,7,8. Aop 스키마에 정의된 태그는 별도의 네임스페이스를 지정해서 디폴트 네임스페이스의 <bean>태그와 구분해서 사용 가능.

4. http~~/aop : aop 스키마는 aop 네임스페이스를 가지므로,aop 접두어를 사용한다.

29. <aop:config> : AOP 설정을 담는 부모태그. 필요에 따라 AspectJAdvisorAutoProxyCreator를 빈으로 등록해 사용함.

39. <aop:pointcut> : expression의 표현식을 프로퍼티로 가진 AspectJExpressionPointcut을 빈으로 등록함.

40. <aop:advisor>: advicepointcutref를 프로퍼티로 갖는 DefaultBeanFactoryPointAdvisor를 등록.

 

위처럼 사용하면 주석처리 된 설정과 동일하거나, 기능이 좀 더 확장된 것들이다.

<bean> 태그를 사용했을 때와 비교해보면 이해하기 쉬울뿐더러 코드의 양도 줄었음.

 

33.  스프링의 프록시 방식 AOP를 적용하려면 최소한 네 가지 빈을 등록해야 한다. 여태 사용하던 UserDaoUserSerivce 빈과는 성격이 다르다. 어플리케이션의 일부 기능을 담고 있는 형태가 아닌, 스프링 컨테이너에 의해 자동으로 인식돼서 특별한 작업을 위해 사용된다.

자동 프록시 생성기 : DefaultAdvisorAutoProxyCreator. 애플리케이션 컨텍스트가 빈 오브젝트를 생성하는 과정에 빈 후처리기로 참여한다. 빈으로 등록된 어드바이저를 이용해서 프록시를 자동으로 생성하는 기능을 담당한다.

어드바이스 : 부가기능을 구현한 클래스를 빈으로 등록. AOP 관련 빈 중에서 유일하게 직접 구현한 클래스를 사용한다.

포인트컷 : 스프링의 AspectJExpressionPointcut을 빈으로 등록하고 expression 프로퍼티에 포인트컷 표현식을 넣어주면 된다.

>  어드바이저 : DefaultPointcutAdvisor 클래스를 빈으로 등록해서 사용한다. 어드바이스와 포인트컷을 프로퍼티에 참조하는 것 외에는 기능은 없다. 자동 프록시 생성기에 의해 자동 검색되어 사용된다.

 

 

33~35. 주석부분처럼 말고 위처럼 독립적인 태그로 두고 어드바이저 태그에서 참조하는 대신 포인트컷과 어드바이저 태구와 결합하는 방법도 가능하다.

태그가 하나 줄어 독립적으로 정의하는 것보다 간결해서 보기 좋다.

하지만 하나의 포인트컷을 여러 개의 어드바이저에서 공유하려고 하는 경우에는 포인트컷을 독립적인 <aop:pointcut> 태그로 등록해야 한다.

포인트컷을 내장하는 경우 <aop:advisor> 태그 하나로 두 개의 빈이 등록된다.

>  <aop:advisor> 처럼 애트리뷰트 설정에 따라 등록되는 빈의 개수와 종류가 달라질 수도 있다(2개 이상 어드바이저 설정시).

 

 

 

 

MockUserDao : 목오브젝트 단위테스트를 위한 오브젝트. 이렇게 매번 작성하면 번거로움. 메일 테스트 스텁 오브젝트 마찬가지.

118. 트랜잭션 및 AOP기능 검증을 위한 메서드

 

 

152. mock 프레임웍 사용 목 오브젝트를 일일이 만들 필요없이 인터페이스를 던져주면 만들어줌