wannaqueen
  • Initial page
  • Spring boot
    • 스프링부트의 소개
      • 8. 스프링 부트 소개 by ks
      • 9. 시스템 요구사항 by ks
      • 10. 스프링 부트 설치 by ks
      • 11. 첫 번째 Spring Boot 애플리케이션 개발하기 by ys
        • 11.1 POM 만들기
        • 11.2 클래스 패스 의존성 추가하기
        • 11.3 코드 작성하기
        • 11.4 예제 실행하기
        • 11.5 실행 가능한 jar 만들기
      • 12. 다음에 읽을 내용 by ys
      • 13. 빌드 시스템 by sh
        • 13.1 의존성 관리
        • 13.2 Maven
        • 13.3 Gradle
        • 13.4 Ant
        • 13.5 Starters
    • 스프링부트의 기능
      • 23. Spring Application by ys
        • 23.1 startup 실패
        • 23.2 배너를 내가 원하는 대로 바꾸기
        • 23.3 SpringApplication 커스터마이징하기
        • 23.4 Fluent Builder API
        • 23.5 어플리케이션 이벤트와 리스너들
        • 23.6 웹 환경
        • 23.7 Application 인자에 접근하기
        • 23.8 ApplicationRunner 또는 CommandLineRunner 사용
        • 23.9 어플리케이션 종료
        • 23.10 관리자 기능
      • 24. 외부화된 구성 by ys
        • 24.1 임의의 값 구성
        • 24.2 명령행 특성 액세스
        • 24.3 응용 프로그램 속성 파일
        • 24.4 프로파일 관련 프라퍼티들
        • 24.5 프라퍼티들에서 플레이스홀더들
        • 24.6 속성의 암호화
        • 24.7 속성대신 yaml 사용하기 - 다시
        • 24.8 Type-safe Configuration Properties
      • 25. 프로파일 by ks
        • 25.1 Active 프로파일 더하기
        • 25.2 프로그램적으로 프로파일 세팅
        • 25.3 프로파일 별 구성파일
      • 26. 로깅 by ks
        • 26.1 로그 형식
        • 26.2 콘솔 출력
        • 26.3 파일 출력
        • 26.4 로거 레벨
        • 26.5 로그 그룹
        • 26.6 사용자 정의 로그 설정
        • 26.7 로그백 확장
      • 27 국제화 by ks
      • 28. SQL 데이터베이스 작업 by sh
      • 29. NoSQL 기술 사용 by sh
      • 30. 메시징 by sh
      • 31. 이메일 전송 by sh
      • 28. JSON by sh (다시 시작!)
        • 28.1 Jackson
        • 28.2 Gson
        • 28.3 JSON-B
      • 29. 웹 응용 프로그램 개발 by sh
        • 29.1 The “Spring Web MVC Framework”
        • 29.2 The “Spring WebFlux Framework”
        • 29.3 JAX-RS and Jersey
        • 29.4 내장된 서블릿 컨테이너 지원
        • 29.5 내장된 반응형 서버 지원
        • 29.6 반응형 서버 리소스 구성
      • 30. Security by ys
        • 30.1 MVC 보안
        • 30.2 WebFlux 보안
        • 30.3 OAuth2
        • 30.4 Actuator 보안
      • 31. SQL 데이터베이스 작업 by ys
        • 31.1 Configure a DataSource
        • 31.2 JdbcTemplate 사용
        • 31.3 JPA와 스프링 데이터 JPA
        • 31.4 스프링 데이터 JDBC
        • 31.5 H2의 웹 콘솔 사용
        • 31.6 jOOQ 사용하기
      • 32. NoSQL 기술로 작업하기 by ks
      • 33 Caching by ks
      • 34. 메시징
        • 34.1 JMS by sh
        • 34.2 AMQP by sh
        • 34.3 Apache Kafka Support by ys
      • 35.REST 서비스 호출 RestTemplate
        • 35.1 RestTemplate 사용자 정의
      • 36. REST 서비스 호출 WebClient by ys
      • 37. 유효성 확인 by ys
      • 38. 이메일 보내기 by ys
      • 39. JTA를 이용한 분산 트랜잭션 by ys
      • 40.하젤캐스트(Hazelcast) by ys
      • 41. Quartz Scheduler by ys
      • 42. 작업 실행 및 스케줄링 by ys
      • 43. 스프링 통합 by ys
      • 44. Spring 세션 by ys
      • 45. JMX를 통한 모니터링 및 관리 by ys
      • 46. Testing by sh
        • 46.3 Testing Spring Boot Applications
          • 46.1~46.3.10
          • 46.3.11 자동 구성된 Spring WebFlux 테스트
          • 46.3.12 자동 구성된 Data JPA 테스트들
          • 46.3.13 자동 구성된 JDBC 테스트들
          • 46.3.14 자동 구성된 Data JDBC 테스트들
          • 46.3.15 자동 구성된 JOOQ 테스트들
          • 46.3.16 자동 구성된 Data MongoDB 테스트들
          • 46.3.17 자동 구성된 Data Neo4j 테스트
          • 46.3.18 자동 구성된 Data Redis 테스트들
          • 46.3.19 자동 구성된 Data LDAP 테스트들
          • 46.3.20 자동 구성된 REST 클라이언트
          • 46.3.21자동 구성된 Spring REST Docs 테스트
          • 46.3.22 추가적인 자동 구성 및 슬라이스
          • 46.3.23 사용자 구성 및 분할
          • 46.3.24 Spock을 사용하여 스프링 부팅 응용 프로그램 테스트
      • 47. 웹 소켓 by sh
      • 48. 웹 서비스 by sh
        • 48.1WebServiceTemplate로 웹 서비스 호출하기
      • 49. 자신만의 자동 구성 생성
        • 49.1 자동 구성된 빈 이해하기 by sh
        • 49.2 자동 구성 후보 찾기 by sh
        • 49.3 Condition 어노테이션들 by sh
        • 49.4 자동구성 테스팅 by ks
        • 49.5 자신만의 스타터 생성하기 by ks
      • 50. Kotlin support by ys
      • 51. What to Read Next by ys
      • 52. Production-ready 기능 활성화 by ys
      • 53. Endpoints
        • 53.1 엔드 포인트 활성화 by ys
        • 53.2 엔드 포인트 노출 by ys
        • 53.3 HTTP endpoints 보안 by ys
        • 53.4 Endpoints 구성
        • 53.5 액츄에이터 웹 엔드 포인트 용 하이퍼 미디어 by ys
        • 53.6 CORS 지원 by ys
        • 53.7 커스텀 엔드포인트 확장 by ks
        • 53.8 Health 정보 by ks
        • 53.9 어플리케이션 정보 by sh
      • 54. HTTP를 통한 모니터링 및 관리 by sh
        • 54.1 관리 엔드 포인트 경로 사용자 정의
        • 54.2 관리 서버 포트 사용자 정의
        • 54.3 관리 관련 SSL 구성
        • 54.4 관리 서버 주소 사용자 정의
        • 54.5 HTTP 끝점 사용안하기
  • spring 5.0
    • 1. IoC 컨테이너
      • 1.1 스프링 IoC 컨테이너와 빈의 도입 by sh
      • 1.2 컨테이너 by ys
      • 1.3 빈 개요 by ks
      • 1.4 의존성 by ks, ys, sh
        • 1.4.1 의존성 주입 by ks
        • 1.4.2 의존성과 configuration by ks
        • 1.4.3 depends-on 사용 by ys
        • 1.4.4 게으른-초기화된 bean by ys
        • 1.4.5 Autowiring Collaborators by ys
        • 1.4.6 메소드 주입 by sh
      • 1.5. 빈의 범위 by sh
      • 1.6 빈의 특성 커스터마이징하기 by ys
        • 1.6.1 라이프 사이클 콜백
        • 1.6.2 ApplicationContextAware과BeanNameAware
        • 1.6.3 기타 Aware인터페이스
      • 1.7 빈 정의 상속by ys
        • 1.7.1 빈 정의 상속
      • 1.8 컨테이너 확장 포인트 by ks
      • 1.9 어노테이션 기반의 컨테이너 구성 by sh
      • 1.10 클래스패스 스캔 및 관리 by ys
        • 1.10.1 @Component 및 추가 스테레오 타입 어노테이션
        • 1.10.2 meta-annotation 및 composed annotation 사용
        • 1.10.3 자동으로 클래스 검색 및 Bean 정의 등록
        • 1.10.4 스캐닝을 커스터마이징 하기위해 필터를 사용
        • 1.10.5 component 내에 Bean 메타 데이터 정의
        • 1.10.6 이름으로 자동탐지되는 컴포넌트
        • 1.10.7 범위로 자동 감지되는 컴포넌트
        • 1.10.8 annotation과 함께 한정된 메타데이터 제공
        • 1.10.9 후보 component의 index 생성
      • 1.11 JSR 330 표준 어노테이션 사용하기 by sh
      • 1.12 자바 기반의 컨테이너 구성 by sh, ks
        • 1.12.1 기본 개념: @Bean 및 @Configuration by sh
        • 1.12.2 AnnotationConfigApplicationContext를 사용한 스프링 컨테이너 인스턴스화 by sh
        • 1.12.3 @Bean 사용 by ks
        • 1.12.4 @Configuration 어노테이션 by ks
        • 1.12.5 자바 기반 Configuration구성 by ks
      • 1.13 환경 추상화 by ys
        • 1.13.1 빈 정의 프로파일
        • 1.13.2 PropertySource추출
        • 1.13.3 @PropertySource 사용
        • 1.13.4 Placeholder Resolution in Statements
      • 1.14 LoadTimeWeaver 등록 by ks
      • 1.15 ApplicationContext의 부가 수용가능성들 by ks, sh
        • 1.15.1 MesageSource를 사용한 국제화 by ks
        • 1.15.2 표준과 커스텀 이벤트 by ks
        • 1.15.3 로우 레벨 리소스에 대한 편리한 접근 by sh
        • 1.15.4 웹 어플리케이션에 대한 간편한 Application 인스턴스화 by sh
        • 1.15.5 스프링 ApplicationContext를 Java EE RAR 파일로 배포하가ㅣ by sh
        • 1.15.3 Low-level 리소스로 편리한 접근
        • 1.15.4 웹 어플리케이션을 위한 편리한 ApplicationContext 인스턴스화
      • 1.16 BeanFactory by sh
    • 2. Resource by ks
      • 2.1 소개
      • 2.2 Resource interface
      • 2.3 내장 리소스 확장
      • 2.4 ResourceReader
      • 2.5 ResourceLoaderAware 인터페이스
      • 2.6 Resources 의존성
      • 2.7 어플리케이션 컨텍스트와 리소스 경로
    • 3. 유효성 검사, 데이터 바인딩 및 유형 변환 by ys, sh
      • 3.1. Spring의 Validator 인터페이스를 사용하여 유효성 검사 by ys
      • 3.2. 오류 메시지로 코드 해결 by ys
      • 3.3. bean 조작과 BeanWrapper by ys
        • 3.3.1. 기본 및 중첩 된 프로퍼티를 설정 및 가져 오기
        • 3.3.2. 내장 된 PropertyEditor구현
      • 3.4 스프링 타입 변환 by sh
        • 3.4.1 Converter SPI
        • 3.4.2 ConverterFactory 사용하기
        • 3.4.3 GenericConverter 사용하기
        • 3.4.4 ConversionService API
        • 3.4.5 ConversionService 구성
        • 3.4.6 프로그래밍 방식으로 ConversionService 사용하기
      • 3.5 스프링 필드 포맷팅 by sh
        • 3.5.1 Formatter SPI
        • 3.5.2 Annotation 기반의 포맷팅
        • 3.5.3 FormatterRegistry SPI
        • 3.5.4 FormatterRegistrar SPI
        • 3.5.5 스프링 MVC에서 포맷팅 구성하기
      • 3.6 전역 Date and Time 포맷 구성 by sh
      • 3.7 스프링 유효성 검사 by sh
        • 3.7.1 by sh
        • 3.7.2 by sh
        • 3.7.3 by sh
    • 4 스프링 표현식 언어 (SpEL)
      • 4.1 평가 by sh
      • 4.2 빈 정의에 있는 표현식 by sh
      • 4.3 Language Reference
        • 4.3.1 리터럴 표현식 by ys
        • 4.3.2 프로퍼티,배열,목록,지도 및 인덱서 by ys
        • 4.3.3 인라인 목록 by ys
        • 4.3.4 인라인 Maps by ys
        • 4.3.5 배열 구성 by ys
        • 4.3.6 행동 양식 by ys
        • 4.3.7 연산자 by ys
        • 4.3.8 유형 by ys
        • 4.3.9 생성자 by ys
        • 4.3.10 변수 by ks
        • 4.3.11 함수 by ks
        • 4.3.12 빈 참조 by ks
        • 4.3.13 삼항 연산자 (If-Then-Else) by ks
        • 4.3.14 엘비스 연산자 by ks
        • 4.3.15 안전한 네비게이션 연산자 by ks
        • 4.3.16 컬렉션 셀렉션 by ks
        • 4.3.17 컬렉션 프로젝션 by ks
        • 4.3.18 표현 템플릿 by ks
    • 5 spring을 이용한 aspect 지향 프로그래밍
      • 5.1 AOP 개념 by ys
      • 5.2 Spring AOP 기능 및 목표 by ys
      • 5.3 AOP 프록시 by ys
      • 5.4 @AspectJ 지원 by ys,ks
        • 5.4.1 @AspectJ 지원 활성화 by ys
        • 5.4.2 Aspect 선언하기 by ys
        • 5.4.3 Pointcut 선언하기 by ys
        • 5.4.4 Advice 선언 by ks
        • 5.4.5 소개 by ks
        • 5.4.6 Aspect 초기화 모델 by ks
        • 5.4.7 AOP 예제 by ks
      • 5.5 스키마 기반 AOP 지원 by sh
        • 5.5.1 Aspect 선언 by sh
        • 5.5.2 Pointcut 선언 by sh
        • 5.5.3 Advice 선언 by sh
        • 5.5.4 인트로덕션 by sh
        • 5.5.5 Aspect 인스턴스화 모델 by sh
        • 5.5.6 Advisors by sh
        • 5.5.7 AOP 스키마 예제 by sh
    • 6 Spring AOP API
      • 6.1 Spring의 Pointcut API
        • 6.1.1 개념들 by ys
        • 6.1.2 Pointcuts에 대한 작업 by ys
        • 6.1.3 AspectJ Expression Pointcuts by ys
        • 6.1.4 편리한 Pointcut 구현 by ys
        • 6.1.5 포인트 컷 수퍼 클래스 by ys
        • 6.1.6. 사용자 정의 Pointcut by ys
      • 6.2 Spring의 Advice API
        • 6.2.1. 조언 라이프 사이클 by ys
        • 6.2.2 Spring의 advice 유형 by ys
      • 6.3 Spring의 Advisor API by ks
      • 6.4 ProxyFactoryBean을 사용해서 AOP 프록시 생성 by ks
        • 6.4.1 기본
        • 6.4.2 자바빈 프로퍼티
        • 6.4.3 JDK 및 CGLIB 기반 프록시
        • 6.4.4 프록시 인터페이스
        • 6.4 5 프록시 클래스
        • 6.4.6 "Global" advisor 사용
      • 6.5 간결한 프록시 정의 by sh
      • 6.6 ProxyFactory를 사용하여 프로그래밍 방식으로 AOP 프록시 만들기 by sh
      • 6.7 Advised 객체들 조작하기 by sh
      • 6.8 "자동 프록시" 기능 사용 by sh
      • 6.9 TargetSource구현체 사용하기 by sh
      • 6.10 새로운 Advice 타입 정의하기 by sh
    • 7. 데이터 버퍼와 코덱 by ks
Powered by GitBook
On this page

Was this helpful?

  1. spring 5.0
  2. 3. 유효성 검사, 데이터 바인딩 및 유형 변환 by ys, sh
  3. 3.3. bean 조작과 BeanWrapper by ys

3.3.2. 내장 된 PropertyEditor구현

Previous3.3.1. 기본 및 중첩 된 프로퍼티를 설정 및 가져 오기Next3.4 스프링 타입 변환 by sh

Last updated 6 years ago

Was this helpful?

Spring은 Object 과 String간의 변환 PropertyEditor개념을 사용하여 수행합니다. 객체 자체와 다른 방식으로 프로퍼티를 표현하는 것이 편리 할 수 ​​있습니다. 예를 들어, Date 는 사람이 읽을 수있는 방식으로 ( String같이 '2007-14-09') 나타낼 수 있지만, 사람이 읽을 수있는 형식을 원래 날짜로 다시 변환 할 수 있습니다 (또는 더 나은 방법으로 사람이 읽을 수있는 어떤 형식도 다시 Date개체 로 변환 할 수 있습니다 ). 이 동작은 java.beans.PropertyEditor유형의 사용자 정의 편집기를 등록하여 수행 할 수 있습니다. BeanWrapper나 이전 챕터에서 얘기했던 대안적인 특정 IoC 컨테이너에 커스텀 에디터를 등록하면 어떻게 프로퍼티를 원하는 타입으로 변환하는 지 알려준다. 자세한 내용은 의 PropertyEditor 참조하십시오

Spring에서 속성 편집이 사용되는 몇 가지 예 :

  • PropertyEditor를 사용해서 빈에 프로퍼티를 설정한다. XML 파일에 선언한 어떤 빈의 프로퍼티 값으로 java.lang.String을 사용했을 때 스프링은 (해당 프로퍼티의 setter가 Class-parameter를 가지고 있다면)파라미터를 Class 객체로 처리하려고 ClassEditor를 사용할 것이다.

  • 스프링 MVC 프레임워크에서 HTTP 요청 파라미터의 파싱은CommandController의 모든 하위클래스에 수동으로 연결할 수 있는 모든 종류의 PropertyEditor를 사용해서 이뤄진다.

Spring은 삶을 쉽게 만들어 주는 여러 가지 내장 된 PropertyEditor구현을 가지고있다. 그들은 모두 org.springframework.beans.propertyeditors 패키지에 들어 있습니다. 대부분의 경우 (다음 표에 표시된대로 모두는 아님) 기본적으로에 BeanWrapperImpl의해 등록됩니다. 속성 편집기를 어떤 방식으로 구성 할 수있는 곳에서는 자신 만의 변형을 등록하여 기본 변형을 재정의 할 수 있습니다. 다음 테이블은 PropertyEditorSpring이 제공 하는 다양한 구현을 설명 합니다.

표 12. 기본 제공

PropertyEditor

class

설명

ByteArrayPropertyEditor

바이트 배열 용 편집기. 문자열을 해당 바이트 표현으로 변환합니다. BeanWrapperImpl에 의해 기본적으로 등록됩니다.

ClassEditor

클래스를 나타내는 문자열을 실제의 클래스에 해석하거나, 그 역의 경우도 해석합니다. (클래스로 파싱하거나 그 반대로 파싱) 클래스가 발견되지 않으면, IllegalArgumentException가 throw됩니다. 기본적으로 BeanWrapperImpl에 의해 등록됩니다.

CustomBooleanEditor

Boolean속성에 대한 사용자 정의 가능한 속성 편집기. BeanWrapperImpl의 기본값으로 등록되었지만 사용자 정의 편집기로 사용자 정의 인스턴스를 등록하여 재정의 할 수 있습니다.

CustomCollectionEditor

모든 소스 Collection를 지정된 대상 Collection유형으로 변환하는 콜렉션의 특성 편집기 .

CustomDateEditor

java.util.Date사용자 정의 속성 편집기, DateFormat사용자 정의 지원. 기본적으로 등록되지 않았습니다. 필요에 따라 적절한 형식으로 사용자 등록해야합니다.

CustomNumberEditor

Integer, Long, Float, 또는 Double와 같은 Number타입의 서브 클래스를 위한 사용자 정의 속성 편집기. 기본적으로 등록 BeanWrapperImpl되었지만 사용자 정의 편집기로 사용자 정의 인스턴스를 등록하여 재정의 할 수 있습니다.

FileEditor

문자열을 java.io.File객체로 해석 합니다. 기본적으로 BeanWrapperImpl에 의해 등록됩니다.

InputStreamEditor

InputStream 속성이 직접 문자열로 설정할 수 있도록 문자열을 가지고 InputStream을 생성하는 (중간 편도 속성 편집기 ResourceEditor및 Resource 에 의해 생성 할 수 있습니다 ) 단방향 프로퍼티 에디터이다. 기본 사용법은 InputStream귀하를 위해 닫히지 않습니다 . 기본적으로 BeanWrapperImpl에 의해 등록됩니다.

LocaleEditor

문자열을 Locale객체로 또는 그 반대로 해석 할 수 있습니다 (문자열 형식은메소드 [country][variant]와 동일 함 ). 기본적으로에 의해 등록됩니다 .toString()LocaleBeanWrapperImpl

PatternEditor

문자열을 java.util.regex.Pattern객체로 또는 그 반대로 해석 할 수 있습니다.

PropertiesEditor

문자열 ( java.util.Properties클래스 의 javadoc에 정의 된 형식으로 포맷 됨 )을 Properties객체 로 변환 할 수 있습니다. 기본적으로 BeanWrapperImpl에 의해 등록됩니다.

StringTrimmerEditor

문자열을 다듬는 속성 편집기. 선택적으로 빈 문자열을 null값 으로 변환 할 수 있습니다 . 기본적으로 등록되지 않음 - 사용자가 등록해야합니다.

URLEditor

URL의 문자열 표현을 실제 URL객체로 해석 할 수 있습니다. 기본적으로 BeanWrapperImpl에 의해 등록됩니다.

Spring은 java.beans.PropertyEditorManager을 사용하여 필요한 속성 편집기의 검색 경로를 설정합니다. 검색 경로도 sun.bean.editors포함하여, Font, Color및 대부분의 기본 유형과 같은 유형의 PropertyEditor구현을 포함합니다.

또한 표준 JavaBeans 인프라 스트럭처 PropertyEditor는 처리하는 클래스와 동일한 패키지에 있고 Editor 와 함께 해당 클래스와 동일한 이름을 추가 하면 클래스를 명시 적으로 등록 할 필요없이 자동으로 검색 합니다 . 예를 들어, 다음과 같은 클래스 및 패키지 구조를 가질 수 있습니다. 이는 SomethingEditor클래스가 인식되어 PropertyEditorfor Something유형화 된 특성 으로 사용되기 에 충분합니다.

com
  chank
    pop
      Someting
      SomethingEditor // Something 클래스의 PropertyEditor
com
  chacnk
    pop
      Something
      SomethingBeanInfo // Something 클래스의 BeanInfo

참조 된 SomethingBeanInfo클래스 의 다음 Java 소스 코드는 a CustomNumberEditor를 클래스 의 age속성 과 연결합니다 Something.

public class SomethingBeanInfo extends SimpleBeanInfo {

    public PropertyDescriptor[] getPropertyDescriptors() {
        try {
            final PropertyEditor numberPE = new CustomNumberEditor(Integer.class, true);
            PropertyDescriptor ageDescriptor = new PropertyDescriptor("age", Something.class) {
                public PropertyEditor createPropertyEditor(Object bean) {
                    return numberPE;
                };
            };
            return new PropertyDescriptor[] { ageDescriptor };
        }
        catch (IntrospectionException ex) {
            throw new Error(ex.toString());
        }
    }
}

추가 사용자 지정 PropertyEditor구현 등록

빈 속성을 문자열 값으로 설정할 때 Spring IoC 컨테이너는 표준 자바 빈즈 PropertyEditor구현을 사용 하여 이러한 문자열을 속성의 복합 유형으로 변환한다. Spring은 많은 커스텀 PropertyEditor구현 (예를 들어 문자열로 표현 된 클래스 이름을 Class객체 로 변환)을 미리 등록한다 . 또한 Java의 표준 JavaBeans PropertyEditor검색 메커니즘을 사용하면 PropertyEditor 클래스의 이름을 적절하게 지정하고 지원 클래스를 제공하는 패키지와 동일한 패키지에 배치하여 자동으로 찾을 수 있습니다.

다른 관례를 등록 할 필요가있는 경우에 PropertyEditors, 몇몇 기계 장치는 유효하다. 일반적으로 편리하지 않거나 권장되지 않는 가장 수동적 인 방법 은 참조 가 있다고 가정 registerCustomEditor()하고 ConfigurableBeanFactory인터페이스 의 메소드 를 사용하는 것입니다 BeanFactory. 또 다른 (약간 더 편리한) 메커니즘은 호출 된 특별한 bean factory post-processor를 사용하는 것 CustomEditorConfigurer입니다. 빈 factory 후 처리기를 BeanFactory구현 과 함께 사용할 수 있지만 CustomEditorConfigurer중첩 된 속성 설정이 있으므로 ApplicationContext다른 bean과 비슷한 방식으로 배포 할 수 있으며 자동으로 감지 할 수있는 위치 와 함께 사용하는 것이 좋습니다. 적용된.

표준 JavaBeans PropertyEditor인스턴스는 문자열로 표현 된 속성 값을 속성의 실제 복합 유형으로 변환하는 데 사용됩니다. 당신이 사용할 수있는 CustomEditorConfigurer편리 추가에 대한 지원을 추가하려면, 빈 공장 포스트 프로세서를 PropertyEditor에 인스턴스 ApplicationContext.

호출 된 사용자 클래스 ExoticType와 호출 된 다른 클래스 를 정의하는 다음 예제를 고려해보십시오.이 클래스 는 속성으로 설정 DependsOnExoticType해야 ExoticType합니다.

package example;

public class ExoticType {

    private String name;

    public ExoticType(String name) {
        this.name = name;
    }
}

public class DependsOnExoticType {

    private ExoticType type;

    public void setType(ExoticType type) {
        this.type = type;
    }
}

일이 제대로 설정되면 type 속성을 문자열 PropertyEditor로 지정하여 실제 ExoticType인스턴스 로 변환 할 수 있기를 원합니다 . 다음 bean 정의는이 관계를 설정하는 방법을 보여줍니다.

<bean id="sample" class="example.DependsOnExoticType">
    <property name="type" value="aNameForExoticType"/>
</bean>

PropertyEditor구현은 다음과 유사 할 수 :

// converts string representation to ExoticType object
package example;

public class ExoticTypeEditor extends PropertyEditorSupport {

    public void setAsText(String text) {
        setValue(new ExoticType(text.toUpperCase()));
    }
}

마지막으로, 다음 예는 사용하는 방법을 보여줍니다 CustomEditorConfigurer새로운 등록 PropertyEditor와ApplicationContext다음 필요에 따라 사용할 수 있습니다 어떤을 :

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
        <map>
            <entry key="example.ExoticType" value="example.ExoticTypeEditor"/>
        </map>
    </property>
</bean>

사용 PropertyEditorRegistrar

다음 예제는 사용자 고유의 PropertyEditorRegistrar구현 을 만드는 방법을 보여줍니다 .

package com.foo.editors.spring;

public final class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar {

    public void registerCustomEditors(PropertyEditorRegistry registry) {

        // it is expected that new PropertyEditor instances are created
        registry.registerCustomEditor(ExoticType.class, new ExoticTypeEditor());

        // you could register as many custom property editors as are required here...
    }
}

org.springframework.beans.support.ResourceEditorRegistrar예제를 참조하십시오.PropertyEditorRegistrar 구현에 . registerCustomEditors(..)메서드 구현시 각 속성 편집기의 새 인스턴스를 만드는 방법에 유의하십시오.

다음 예는 CustomEditorConfigurer우리의 인스턴스 를 구성하고 인스턴스를 삽입하는 방법을 보여줍니다 CustomPropertyEditorRegistrar.

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="propertyEditorRegistrars">
        <list>
            <ref bean="customPropertyEditorRegistrar"/>
        </list>
    </property>
</bean>

<bean id="customPropertyEditorRegistrar"
    class="com.foo.editors.spring.CustomPropertyEditorRegistrar"/>
public final class RegisterUserController extends SimpleFormController {

    private final PropertyEditorRegistrar customPropertyEditorRegistrar;

    public RegisterUserController(PropertyEditorRegistrar propertyEditorRegistrar) {
        this.customPropertyEditorRegistrar = propertyEditorRegistrar;
    }

    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception {
        this.customPropertyEditorRegistrar.registerCustomEditors(binder);
    }

    // other methods to do with registering a User
}

이 스타일의 PropertyEditor등록은 간결한 코드 ( initBinder(..)한 줄만 구현 됨)로 이어질 수 있으며 공통 PropertyEditor 등록 코드를 클래스에 캡슐화 한 다음 Controllers필요한 만큼 공유 할 수 있습니다.

당신은 또한 표준 사용할 수 있습니다 BeanInfo(어느 정도 설명뿐만 아니라 여기에 자바 빈즈 메커니즘을 ). 다음 예제에서는 BeanInfo메커니즘을 사용하여 하나 이상의 PropertyEditor인스턴스를 연관된 클래스의 속성 으로 명시 적으로 등록합니다 .

모든 bean 팩토리와 어플리케이션 컨텍스트는 사용법 a BeanWrapper를 통해 속성 변환을 처리 하는 다수의 내장 된 속성 편집기를 자동으로 사용합니다 . 표준 속성은 BeanWrapper 레지스터가 나열되어 것을 편집합니다 . 또한 ApplicationContexts특정 응용 프로그램 컨텍스트 유형에 적합한 방식으로 리소스 조회를 처리하는 추가 편집기를 재정의하거나 추가하십시오.

Spring 컨테이너에 속성 에디터를 등록하는 또 다른 메커니즘은 a PropertyEditorRegistrar. 이 인터페이스는 여러 가지 상황에서 동일한 속성 편집기 집합을 사용해야하는 경우 특히 유용합니다. 해당하는 등록 기관을 작성하고 각각의 경우에 다시 사용할 수 있습니다. PropertyEditorRegistrar인스턴스 PropertyEditorRegistry는 스프링 BeanWrapper(and DataBinder)에 의해 구현 된 인터페이스라는 인터페이스와 함께 작동 합니다. PropertyEditorRegistrar인스턴스는 특히 CustomEditorConfigurer 설명 된 속성 과 함께 사용할 때 편리 합니다 . 이 방식 으로 에 추가 된 인스턴스 는 다음과 쉽게 공유 할 수 있습니다.setPropertyEditorRegistrars(..)PropertyEditorRegistrarCustomEditorConfigurerDataBinder스프링 MVC 컨트롤러. 또한 맞춤 편집기에서 동기화가 필요하지 않습니다.PropertyEditorRegistrar 는 PropertyEditor 각 빈 생성 시도에 대해 신선한 인스턴스 를 생성 할 것으로 예상됩니다 .

마지막으로 (그리고 사용 당신의 사람들을 위해이 장의 초점에서 출발의 비트에 ) 사용하여 PropertyEditorRegistrars데이터 바인딩과 함께 Controllers(같은 것은 SimpleFormController) 매우 편리 할 수 있습니다. 다음 예제에서는 메서드 PropertyEditorRegistrar구현시에를 initBinder(..)사용합니다.

java.beans오라클 패키지
자바 스크립트의 javadoc을
.
여기에
이전 섹션에
있는
여기에
Spring의 MVC 웹 프레임 워크를