2.5 ResourceLoaderAware 인터페이스

ResourceLoaderAware 인터페이스는 ResourceLoader 레퍼런스를 제공하는 오브젝트들을 식별하는 특별한 마커 인터페이스이다. ResourceLoaderAware 인터페이스의 정의를 보여준다.

public interface ResourceLoaderAware {

    void setResourceLoader(ResourceLoader resourceLoader);
}

클래스는 ResourceLoaderAware를 확장하고 어플리케이션 컨텍스트(스프링이 관리하는 빈으로서) 로 디플로이될 때 어플리케이션 컨텍스트에 의해 ResourceLoaderAware를 인식한다. 그리고나서 어플리케이션 컨텍스트는 setResourceLoader(ResourceLoader)를 주입하고 인자로서 적용한다.(스프링에서 모든 어플리케이션 컨텍스트는 ResourceLoader 인터페이스를 확장하는 것을 기억하자.)

ApplicationContext는 ResourceLoader이기 때문에 빈은 ApplicationContextAware 인터페이스를 확장할 수 있고 리소스를 직접적으로 로드하기 위해 어플리케이션 컨텍스트를 사용한다. 하지만 일반적으로 만약 필요하다면 특정 ResourceLoader 인터페이스를 사용하는 것이 좋다. 코드는 (유틸리티 인터페이스가 고려될 수 있는) 인터페이스를 로드하는 리소스에 결합되고 전체 스프링 ApplicationContext인터페이스는 아니다.

특정 Application context는 특정 ResourceLoader를 확장하니까 확장하는 리소스 로더를 사용할 수 있지만, 원하는 리소스 로더 인터페이스를 따로 쓰는게 더 좋다는 이야기

스프링 2.5에서 ResourceLoaderAware 인터페이스를 확장하는 것을 대신하는 것으로서 ResourceLoader를 자동연결하는 것에 의존할 수 있다. "전통적으로" contructor 와 byType 자동연결 모드( Autowiring Collaborators 설명된) 는 이제 생성자 인자 뿐 아니라 setter 메소드 파라미터 각각을 위해 ResourceLoader 타입의 의존성을 제공할 가능성이 있다. 더 좋은 유연성을 위해(자동 연결하는 필드 사용 가능성과 여러 파라미터 메소드를 포함하여), 어노테이션 기반의 자동연결된 기능을 사용하는 것을 고려하자. 그런 경우에 ResourceLoader는 필드, 생성사, @Autowired 어노테이션이 붙어진 메소드에서 기대하는 필드, 생성자 인자, 메소드 파라미터에 자동연결된다. 더 심층 정보는 Using @Autowired.보자.

참조 : https://www.logicbig.com/tutorials/spring-framework/spring-core/injecting-resources.html

예제:

 Resource resource = resourceLoader.getResource("url:http://www.example.com/");

Last updated