Spring 국제 화 자원 대량 사용 개선

3956 단어 springbeanxmlWebmvc
최근 spinrg (mvc) + openjpa 를 연구 하고 있 습 니 다. Struts 2 에 비해 SpringMVC 가 가장 답답 한 것 은 국제 화 자원 파일 의 설정 입 니 다. 제 가 할 줄 모 르 는 이유 인지 모 르 겠 습 니 다. 하나씩 써 야 합 니 다.소스 코드 를 보고 대량 가 져 오 는 방법 도 제공 하지 않 은 것 같 아서 수정 을 시도 해 봤 습 니 다.Spring 의 코드 를 자세히 연구 하지 않 고 간단하게 고 쳤 기 때문에 효율 등에 대해 고려 한 것 이 많 지 않 을 수 있 지만 저 는 주로 WEB 부분 에 사 용 했 습 니 다. 시작 할 때 만 불 러 오고 효율 에 도 큰 영향 을 주지 않 습 니 다.코드 는 작 작 하 시 오
 
xml 설정
  <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/classes/com/strong/messages/messages" />
    <property name="cacheSeconds" value="0" />
  </bean>

 
수정 할 것 은 바로 "org. spring from work. context. support. Reloadable Resource BundleMessageSource" 입 니 다. 저 는 class: com. strong. utils. spring. Reloadable Resource BundleMessageSource 를 재 구축 하여 일부 코드 를 수정 하 였 습 니 다.
  public void setBasenames(String[] basenames) {
    if (basenames != null && basenames.length > 0) {
      String strWebPath = this.getClass().getClassLoader().getResource("../../").getPath();
      String strBasePath = strWebPath + basenames[0];
      try {
        List<File> listFile = FileUtils.getSuoYouWenJianLuJing(strBasePath);
        List<String> listFile1 = new ArrayList<String>();
        for (File file : listFile) {
          if (!file.isDirectory() && file.getName().indexOf("_") == -1 && file.getName().indexOf(".properties") > -1) {
            listFile1.add(file.getAbsolutePath().replace(strWebPath, "").replace(".properties", ""));
          }
        }
        this.basenames = new String[listFile1.size()];
        for (int i = 0; i < listFile1.size(); i++) {
          this.basenames[i] = listFile1.get(i).trim();
          System.out.println("load properties file: " + listFile1.get(i).trim());
        }
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }

      // this.basenames = new String[basenames.length];
      // for (int i = 0; i < basenames.length; i++) {
      // String basename = basenames[i];
      // Assert.hasText(basename, "Basename must not be empty");
      // this.basenames[i] = basename.trim();
      // System.out.println(basename);
      // }
    } else {
      this.basenames = new String[0];
    }
  }

 결합 부분 을 최대한 줄 이기 위해 서 는 list 에서 자원 파일 배열 을 첫 번 째 만 가 져 오 는 것 으로 바 꾸 고 이 디 렉 터 리 를 옮 겨 다 니 며 모든 properties 확장 자 를 포함 하지 않 습 니 다파일 의 상대 경 로 를 basenames 에 추가 하면 다른 것 은 변 하지 않 습 니 다.파일 디 렉 터 리 를 옮 겨 다 니 는 코드:
  public static List<File> getSuoYouWenJianLuJing(String strLuJing) throws IOException {
    if (strLuJing == null || strLuJing.length() == 0) {
      return null;
    }
    File fileLuJing = new File(strLuJing);
    if (!fileLuJing.exists()) {
      return null;
    }
    return getSuoYouWenJianLuJing(fileLuJing);
  }

 XML 파일 을 다음 과 같이 다시 수정 합 니 다.
  <bean id="messageSource" class="com.strong.utils.spring.ReloadableResourceBundleMessageSource">
    <property name="basenames" value="WEB-INF/classes/com/strong" />
    <property name="cacheSeconds" value="0" />
  </bean>

 OK 완공, 코드 작성 이 매우 거 칠 고 Reloadable ResourceBundleMessageSource 류 만 수정 되 었 습 니 다. 그러나 의사 와 생각 이 많이 다 르 지 않 습 니 다. 마스크 를 사용 하여 자원 파일 을 가 져 오 는 것 은 / WEB - INF / classes / com / strong / * / messages 등 과 유사 합 니 다.

좋은 웹페이지 즐겨찾기