PropertyEditor 수상

4426 단어 springPropertyEditor
머리말
오늘 ACL 의 유 니 버 설 서 비 스 를 실현 하여 검사 권 사용 에 사용 합 니 다.구현 은 spring 기반 으로 authz 라벨 을 사용자 정의 하 는 것 이지 만 parse params 에서 어 려 운 문제 에 부 딪 혔 습 니 다.
Spring CustomEditor
이것 은 대부분의 사람들 이 낯 설 지 않다 고 믿 습 니 다. 이것 이 바로 spring 의 확장 체제 중 하나 가 아 닙 니까? 사용자 정의 속성 해석 기 에 사용 되 고 가장 보편적 인 Date 해석 으로 그 용법 을 간단하게 돌 이 켜 볼 수 있 습 니 다.
1. 사용자 정의 PropertyEditor 구현
import java.beans.PropertyEditorSupport;  
import java.text.ParseException;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
public class UtilDatePropertyEditor extends PropertyEditorSupport {  
   private String format = "yyyy-MM-dd";   //           
   //        
   public void setAsText(String text)   
              throws IllegalArgumentException{  
      SimpleDateFormat sdf = new SimpleDateFormat(format);  
      try {  
         Date date = sdf.parse(text);   //        
           this.setValue(date);  
      } catch(ParseException) {  
         e.printStackTrace();  
      }  
   }  
  
   public void setFormat(String format) {  
      this.format = format;  
   }  
}

2. Spring 프로필 수정
<bean id="customEditorConfigurer"  
      class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
   <property name="customEditors">  
      <map>  
         <entry key="java.util.Date">  
            <bean class=".../UtilDatePropertyEditor">  
               <!--      -->  
               <property name="format" value="yyyy-MM-dd">  
            </bean>  
         </entry>  
      </map>  
   </property>  
</bean>  
<!--    attributeEditor-->  
<bean id="attributeEditor" class=".../AttributeEditor">  
   <property name="dateValue">  
      <value>2009-12-01</value>  
   </property>  
</bean>

몇몇 문제
그렇게 당연 해 보 입 니 다. 제 가 XML 프로필 을 작성 하려 고 할 때 문제 가 잘못 되 었 습 니 다. 이 Authz 는 일반적인 서비스 로 서 두 개의 라 이브 러 리 로 서 업무 측 에 의존 해 야 합 니 다.
만약 에 응용 프로그램 으로서 cutomEditor 를 사용 하 는 것 은 전혀 문제 가 없 지만 기초 로 편 의 를 제공 하여 이렇게 디자인 할 수 없다 면 사용 자 는 모두 import 당신 의 그 spring 설정 을 사용 해 야 하 는 것 이 아 닙 니까? 다음은 제 가 해결 방안 을 생각 하 겠 습 니 다.
1. [가 독성 이 떨 어 짐] 사용자 정의 Spring 태그 와 service 인 만큼 복잡 한 pojo 를 하지 마 세 요. 필드 는 기본 유형 을 사용 하면 고민 이 많 지 않 습 니 다.
2. BeanFactory 의 인용 을 얻 고 CustomEditor 를 수 동 으로 등록 합 니 다. BeanFactory 의 인용 을 얻 지 못 하 는 것 은 물론 이 고 GetBean 이 이전에 어느 단계 에 코드 를 심 었 는 지 이상 하 게 생각 하지 않 습 니까?
3. 용기 와 무관 한 정적 방법 으로 호출 할 수 있 는 방법 이 없 습 니까?
우선 Spring Property Editor 의 실현 을 살 펴 보 겠 습 니 다.
[BeanWrapperImpl.convertForProperty]
if (editor == null && requiredType != null) {
			// No custom editor -> check BeanWrapperImpl's default editors.
			editor = (PropertyEditor) this.propertyEditorRegistry.getDefaultEditor(requiredType);
			if (editor == null && !String.class.equals(requiredType)) {
				// No BeanWrapper default editor -> check standard JavaBean editor.
				editor = BeanUtils.findEditorByConvention(requiredType);
				if (editor == null && !unknownEditorTypes.containsKey(requiredType)) {
					// Deprecated global PropertyEditorManager fallback...
					editor = PropertyEditorManager.findEditor(requiredType);
					if (editor == null) {
						// Regular case as of Spring 2.5
						unknownEditorTypes.put(requiredType, Boolean.TRUE);
					}
					else {
						logger.warn("PropertyEditor [" + editor.getClass().getName() +
								"] found through deprecated global PropertyEditorManager fallback - " +
								"consider using a more isolated form of registration, e.g. on the BeanWrapper/BeanFactory!");
					}
				}
			}
		}

PropertyEditorManager
JDK 의 Property Editor Manager 를 사용 하여 Editor 관 리 를 확장 하고 용기 와 무관 하 다 면 다음 문 제 는 쉽게 해결 할 수 있 습 니 다.
1. Property Editor Manager 의 등록 방법 을 호출 하여 해석 기 를 등록 합 니 다.
2. xxxEditor 와 xxx 는 같은 가방 에 있 고 자동 으로 발견 할 수 있 습 니 다.또는 Property Editor Manager. setEditor SearchPath 설정 path 호출
약간의 느낌
오픈 소스 코드 를 읽 으 면 여러분 의 지혜 를 얻 을 수 있 습 니 다. 어떤 기능 점 은 자신 이 전혀 고려 하지 않 았 을 수도 있 습 니 다. 더 멀리 볼 수 있 도록 우 리 는 거인 의 어깨 위 에 서 야 합 니 다.
이 글 을 쓰 는 것 은 자신 이 디자인 을 개발 하 는 과정 에서 한편 으로 는 자신의 코드 의 유 니 버 설 성과 품질 에 대해 책임 을 져 야 한 다 는 것 을 일 깨 워 주 는 것 일 뿐 이 고 다른 한편 으로 는 이 확장 점 이 사용자 의 응용 장면 을 만족 시 키 고 유 니 버 설 디자인 을 피드백 하 는 지 고려 해 야 한다.

좋은 웹페이지 즐겨찾기