2010-11-18 2 views
6

이것은 내 수업 (JAX-RS annotated)입니다 :IOC 분야를 제대로 이해하기 위해 findbugs를 가르치는 법?

@Path("/") 
public class Foo { 
    @Context 
    private UriInfo uriInfo; 
    // ... 
} 

이것은 findbugs의 말입니다 :

Unwritten field: com.XXX.Foo.uriInfo 

사실,이 필드는 쓰이지 않지만 JAX-RS 서블릿에 의해 주입됩니다. . 나는 여기서 뭔가 잘못하고 있다고 생각하지만 문제를 어떻게 해결할 것인가?

+0

당신은 그냥 경고를 억제 시도 할 수 OOP 디자인 패러다임 : 대한 올바른의 ... –

+0

@Donal 음, 물론, 심지어 findbugs 유효성 검사를 전혀 사용하지 못하게 할 수도 있습니다. 그러나 유효성 검사를 해제하는 것이 아니라 안전하고 보안 된 코드를 작성하는 방법을 이해하는 것이 중요합니다. Findbugs와 그의 경고는 내가 이해하는 한 이것에 도움이되도록 고안되었습니다. 권리? – yegor256

+0

그게 내가 그걸 해답으로 만들지 않은 이유입니다. (또한 Findbugs 개발자에게 직접 이것에 대해 물어볼 수도 있고,'@ Context' 어노테이션은 런타임에 유지되므로 분석기에서 찾을 수 있습니다 .OTOH, 일이 복잡해지면 Spring을 사용하는 것이 더 좋습니다. 다른 방법으로 Findbugs는 그렇게 화를 내지 않을 것입니다.) –

답변

3

내가 지금까지 이해 한 사실은 findbugs가 옳았다는 것입니다. 이 변수는 클래스 외부에서 액세스 할 수 없으며 내 주석은 OOP 측면에서 유효하지 않습니다. JAX-RS 서블릿은 UriInfo을 삽입하기 위해 필드 액세스 제한을 해제해야합니다. 내가이 분야에 그에게 합법적 인 방법을 제공해야한다 :

@Path("/") 
public class Foo { 
    private UriInfo uriInfo; 
    @Context 
    public void setUriInfo(UriInfo info) { 
    this.uriInfo = info; 
    } 
    // ... 
} 

가 지금은 findbugs과

+0

... 그리고 어떻게 테스트 적용 범위에 영향을 줍니까? ;-) – Armand

+0

'@ Context' 어노테이션 *은 그렇게 작동합니다. –

+0

@Alison 물론'setUriInfo()'에 대한 새로운 테스트를 추가해야했습니다. – yegor256