복붙노트

[SPRING] Spring 3.0은 파일을 리소스로 삽입한다.

SPRING

Spring 3.0은 파일을 리소스로 삽입한다.

내 Spring 3.0 애플리케이션에서 / WEB-INF / dir에 일부 리소스가있다. 런타임에는 InputStream (또는 다른 형식) 중 일부가 필요합니다. 어떻게 검색 할 수 있습니까? 그것들을 정상적인 자원으로 주입 할 수 있습니까?

해결법

  1. ==============================

    1.주석을 통해이를 수행하는 가장 쉬운 방법은 다음과 같습니다.

    주석을 통해이를 수행하는 가장 쉬운 방법은 다음과 같습니다.

    import org.springframework.core.io.Resource;
    
    @Value("classpath:<path to file>")
    private Resource cert;
    
  2. ==============================

    2.모든 ApplicationContext는 정의상 ResourceLoaders입니다. 즉, 해당 구성 내에서 발견 된 모든 리소스 문자열을 확인할 수 있습니다. 이를 염두에두고 org.springframework.core.io.Resource를 받아들이는 setter로 타겟 빈을 선언 할 수있다. 그런 다음 대상 빈을 구성 할 때 속성 값에 리소스 경로를 사용하기 만하면됩니다. Spring은 설정에서 String 값을 Resource로 변환하려고 시도 할 것이다.

    모든 ApplicationContext는 정의상 ResourceLoaders입니다. 즉, 해당 구성 내에서 발견 된 모든 리소스 문자열을 확인할 수 있습니다. 이를 염두에두고 org.springframework.core.io.Resource를 받아들이는 setter로 타겟 빈을 선언 할 수있다. 그런 다음 대상 빈을 구성 할 때 속성 값에 리소스 경로를 사용하기 만하면됩니다. Spring은 설정에서 String 값을 Resource로 변환하려고 시도 할 것이다.

    public class Target {
      private Resource resource;
      public void setResource(final Resource resource) {
        this.resource = resource;
      }
    }
    
    //configuration
    <beans>
      <bean id="target" class="Target">
        <property name="resource" value="classpath:path/to/file"/>
      </bean>
    </beans>
    
  3. ==============================

    3.다음을 사용할 수 있어야합니다.

    다음을 사용할 수 있어야합니다.

    Resource resource = appContext.getResource("classpath:<your resource name>");
    InputStream is = resource.getInputStream();
    

    여기서 appContext는 Spring ApplicationContext입니다 (특히 WebApp가 있으므로 WebApplicationContext).

  4. ==============================

    4.클래스 패스 리소스를 검색하는 예제입니다. 필자는 Java 클래스에 저장하지 않으려는 복잡한 쿼리가있는 SQL 파일을 가져 오는 데이 파일을 사용합니다.

    클래스 패스 리소스를 검색하는 예제입니다. 필자는 Java 클래스에 저장하지 않으려는 복잡한 쿼리가있는 SQL 파일을 가져 오는 데이 파일을 사용합니다.

    public String getSqlFileContents(String fileName) {
        StringBuffer sb = new StringBuffer();
        try {
            Resource resource = new ClassPathResource(fileName);
            DataInputStream in = new DataInputStream(resource.getInputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strLine;
            while ((strLine = br.readLine()) != null) {
                sb.append(" " + strLine);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
    
  5. ==============================

    5.Spring에 의존성을 도입하고 싶지 않다면 여기에 설명 된 접근 방식을 따르십시오. Annotation을 통해 Spring Bean의 File 필드 채우기

    Spring에 의존성을 도입하고 싶지 않다면 여기에 설명 된 접근 방식을 따르십시오. Annotation을 통해 Spring Bean의 File 필드 채우기

  6. from https://stackoverflow.com/questions/7484594/spring-3-0-inject-files-as-resources by cc-by-sa and MIT license