Spring 부가기능

공부한것 다 기록해·2023년 8월 5일
0

01. Resource(외부 자원 가져오기)

외부 sftp,, http, 파일 등에서 자원들을 끌어올 수 있다.

Resource Interface와 그 구현체들


public interface Resource extends InputStreamSource{
	boolean exists();
 	boolean isReadable();
    boolean isOpen();
    boolean isFile();
    URL getURL() throws IOException;
    URL getURI() throws IOException;
    File getFile() throws IOException;
    ReadableByteChannel readableChannel() throws IOException;
    long contentLength() throws IOException;
    long lastModified() throws IOException;
    Resource createRelative(String relativePath) throws IOException
    String getFilename();
    String getDescription();
}

자바의 표준 클래스들은 다양한 리소스(URL, 파일 등)에 접근할 때 충분한 기능을 제공하지 않음, 스프링은 필요한 기능을 만들어 제공

Resource 구현체 목록

Spring 내부 Resource 구현체 중 대표적인 몇 가지

UrlResource

java.net.URL을 래핑한 버전, 다양한 종류(ftp:, file:, http:, 등의 prefix로 접근유형 판단)의 Resource에 접근 가능하지만 기본적으로 http(s)로 원격 접근

ClassPathResource

classpath(소스코드를 빌드한 결과(기본적으로 target/classes 폴더))하위의 리소스 접근 시 사용

FileSystemResource

이름과 같이 File을 다루기 위한 리소스 구현체

SeveltContextResource, InputStreamResource, ByteArrayResource

Servlet 어플리케이션 루트 하위 파일, InputStream, ByteArrayInput 스트림을 가져오기 위한 구현체


Spring ResourceLoader

스프링 프로젝트 내 Resource(파일 등)를 로딩할 때 사용하는 기능

public interface ResourceLoader {
	Resource getResource(String location);
    ClassLoader getClassLoader();
}
  • 기본적으로 applicationContext에서 구현이 되어 있음
  • 프로젝트 내 파일(주로 classpath 하위파일)에 접근할 일이 있을 경우 활용
  • 대부분의 사전정의도니 파일들은 자동으로 로딩되도록 되어 있으나, 추가로 필요한 파일이 있을 때 이 부분 활용 가능!
@Service
public class ResourceService {
	
}

직접 사용해보기

@Configuration
@ComponentScan(basePackages = "com.sangyunpark.payservice")
public class ApplicationConfig {

    @Autowired
    private ApplicationContext applicationContext;

    public void getResource() throws IOException {
        Resource resource = applicationContext.getResource("test.txt");

        System.out.println(resource.contentLength() + "");
    }
}

ResourcePatternResolver

스프링 ApplicationContext에서 ResourceLoader를 불러올 때 사용하는 interface 위치 지정자 패턴("classpath:", "file:", "http:")에 따라 자동으로 Resouce 로더 구현체를 선택

public interface ApplicationContext extends EnvironmentCappable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
	// Spring ApplicationContext interface
}

Application Contexts & Resource Paths

applicationContext(스프링의 핵심설정)을 이루는 설정값을 가져오는 방법

ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");

ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");

Bear bear = (Bear) ctx.getBean("bear");

0개의 댓글