[SPRING] Spring 빈에 파일 자원 주입
SPRINGSpring 빈에 파일 자원 주입
스프링 빈에 파일 리소스를 주입하는 좋은 방법은 무엇입니까? 이제 ServletContext를 autowire하고 아래와 같이 사용합니다. 스프링 MVC에서 더 우아한 방법이 있나요?
@Controller
public class SomeController {
@Autowired
private ServletContext servletContext;
@RequestMapping("/texts")
public ModelAndView texts() {
InputStream in = servletContext.getResourceAsStream("/WEB-INF/file.txt");
// ...
}
}
해결법
-
==============================
1.이 같은:
이 같은:
@Controller public class SomeController { private Resource resource; public void setResource(Resource resource) { this.resource = resource; } @RequestMapping("/texts") public ModelAndView texts() { InputStream in = resource.getInputStream(); // ... in.close(); } }
당신의 bean 정의에서 :
<bean id="..." class="x.y.SomeController"> <property name="resource" value="/WEB-INF/file.txt"/> </bean>
이렇게하면 /WEB-INF/file.txt 경로를 사용하여 ServletContextResource가 생성되어 컨트롤러에 삽입됩니다.
이 기술을 사용하여 구성 요소 검색을 사용하여 컨트롤러를 검색 할 수는 없으므로 명시 적 bean 정의가 필요합니다.
-
==============================
2.무엇을 위해 자원을 사용 하시겠습니까? 당신의 예에서 당신은 아무 것도하지 않습니다.
무엇을 위해 자원을 사용 하시겠습니까? 당신의 예에서 당신은 아무 것도하지 않습니다.
그러나 그것의 이름에서 당신은 당신이 당신이 MessageSource가 될 수있는 국제화 / 로컬라이제이션 메시지를로드하려고 시도하는 것처럼 보입니다.
다음과 같이 일부 beans (별도의 messages-context.xml에 있음)를 정의하는 경우
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>WEB-INF/messages/messages</value> </list> </property> </bean> <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang" /> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> <property name="defaultLocale" value="en_GB" /> </bean>
Spring은 애플리케이션이 시작될 때 리소스 번들을로드 할 것이다. 그런 다음 MessageSource를 컨트롤러에 자동으로 가져 와서 지역화 된 메시지를 가져올 수 있습니다.
@Controller public class SomeController { @Autowired private MessageSource messageSource; @RequestMapping("/texts") public ModelAndView texts(Locale locale) { String localisedMessage = messageSource.getMessage("my.message.key", new Object[]{}, locale) /* do something with localised message here */ return new ModelAndView("texts"); } }
NB. 로케일을 컨트롤러 메소드에 매개 변수로 추가하면 스프링이 마술처럼 연결됩니다.
또한 다음을 사용하여 JSP에서 자원 번들의 메시지에 액세스 할 수 있습니다.
<spring:message code="my.message.key" />
내가 선호하는 방법은 무엇입니까 - 그냥 깨끗하게 보입니다.
-
==============================
3.또는 @Value 주석을 사용하십시오.
또는 @Value 주석을 사용하십시오.
단일 파일의 경우 :
@Value("classpath:conf/about.xml") private Resource about;
여러 파일의 경우 :
@Value("classpath*:conf/about.*") private Resource[] abouts;
from https://stackoverflow.com/questions/7280115/inject-a-file-resource-into-spring-bean by cc-by-sa and MIT license