Resource/AOP
Resource
- 외부자원 가져오기
- 자바의 표준 클래스들은 다양한 리소스(URL, 파일 등)에 접근할 때 충분한 기능을 제공하지 않음
- 스프링은 필요한 기능을 만들어서 제공
Resource 구현체 목록
- UrlResource
- java.net.URL을 래핑한 버전, 다양한 종류(ftp:, file:, http:, 등의 prefix로 접근유형 판단)의 Resource에 접근 가능하지만 기본적으로는 http(s)로 원격접근
- ClassPathResource
- classpath(소스코드를 빌드한 결과(기본적으로 target/classes 폴더)) 하위의 리소스 접근 시 사용
- FileSystemResource
- File을 다루기 위한 리소스 구현체
- SevletContextResource, InputStreamResource, ByteArrayResource
- Servlet 어플리케이션 루트 하위 파일, InputStream, ByteArrayInput 스트림을 가져오기 위한 구현체
Spring ResourceLoader
- 기본적으로 applicationContext에서 구현이 되어 있음
- 프로젝트 내 파일(주로 classpath 하위 파일)에 접근할 일이 있을 경우 활용
- 대부분의 사전정의된 파일들은 자동으로 로딩되도록 되어 있으나, 추가로 필요한 파일이 있 을 때 이 부분 활용 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
@Service
public class ResourceService {
@Autowired
ApplicationContext ctx;
public void setResource() {
Resource myTemplate =
ctx.getResource("classpath:some/resource/path/myTemplate.txt");
// ctx.getResource("file:/some/resource/path/myTemplate.txt");
// ctx.getResource("http://myhost.com/resource/path/myTemplate.txt");
// use myTemplate...
}
}
Application Contexts & Resource Paths
- applicationContext 설정값을 가져오는 방법들
1
2
3
4
5
6
// let's create an applicationContext
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");
// then you can use ctx as a Spring
Bear bear = (Bear) ctx.getBean("bear");
AOP
- 관점 지향 프로그래밍(Aspect Oriented Programing)
- 공통적인 관심사(로깅, 트랜잭션, 인증)를 여러 메서드의 호출 전/후에 원할때마다 손쉽게 추가
- OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있도록 함
AOP 용어
- Aspect
- 여러 클래스나 기능에 걸쳐 있는 관심사, 그리고 그것들을 모듈화함
- AOP 중에서 가장 많이 활용되는 부분은 @Transactional (트랜잭션 관리), @Cacheable 기능
- Advice
- AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 캐시, 인증 등)을 뜻함
- Join point
- 모듈화된 특정 기능이 실행될 수 있는 연결 포인트
- Pointcut
- Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식
- Target Object
- Advice가 적용될 대상 오브젝트
- AOP Proxy
- 대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy라 고 함
- 주로 CGLIB(Code Generation Library, 실행 중에 실시간으로 코드를 생성하는 라이브러리) 프록시를 사용하여 프록싱 처리를 한다.
- Weaving
- Advice를 비즈니스 로직 코드에 삽입하는 것을 말함
AspectJ 지원
- AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리
- 기본적으로 제공되는 Spring AOP로는 다양한 기법(Pointcut 등)의 AOP를 사용할 수 없음
댓글남기기