2012-06-08 5 views
2

나는 다음과 같은 클래스가있는 경우 : 봄 왜 @ 필수가 필드가 아닌 setter로 설정 되었습니까?

package com.example; 

import org.springframework.beans.factory.annotation.Required; 

public class Customer 
{ 
    private Person person; 

    public Person getPerson() { 
     return person; 
    } 
    @Required 
    public void setPerson(Person person) { 
     this.person = person; 
    } 
} 

은 @Required 태그는 다음과 같이 필드 세터에 연결되지 않고 있습니까?

package com.example; 

import org.springframework.beans.factory.annotation.Required; 

public class Customer 
{ 
    @Required 
    private Person person; 

    public Person getPerson() { 
     return person; 
    } 
    public void setPerson(Person person) { 
     this.person = person; 
    } 
} 

종속성은 속성이 설정되어 있는지,하지만 난 뭔가를 누락하지 않는 한, 그 속성이나 필드를 채 웁니다 하나 개의 특정 세터에 묶여 필요가 없습니다.

답변

1

전통적으로 bean은 getter 및/또는 setter로 정의 된 특성을가집니다. 비공개 필드는 생략 할 수 있습니다 (때로는 "가상"필드 이름 지정). 새로운 Java EE 표준에서 bean은 좀 더 느슨하며 public 필드로 정의 된 속성을 가질 수도 있습니다.

그럼에도 불구하고 Spring은 최신 표준을 선행하며 메소드 i.o.에 주석을 가지고 있습니다. 필드는 AOP (간단한 바이트 코드 조작)를 통해 액세스를 가로채는 이점이 있습니다.

+2

필드 접근은 AOP에 의해 가로 챌 수 있지만 (AspectJ 참조) 메소드 오버라이드 (Spring AOP with CGLIB) 또는 프록시 (Spring AOP _without_ CGLIB)와 같은 간단한 것보다는 클래스의 실질적인 재 작성이 필요합니다. –

+0

@DonalFellows AspectJ가 취한 노력에 대해 알고있었습니다. 그러므로 나의 "단순한". 하지만 어쩌면 봄이 그시기를 앞당길지도 모른다. –

+0

어느 것이 먼저 왔는지는 모르겠지만, 나는 그들이 나중에 함께 자라는 독립적 인 노력이라고 생각합니다. –

관련 문제