가 나는 두 개의 주석에 대한 두 가지 질문이있다 :CDI 주입 및 @Model 주석
1) 왜 "faceContext은"자원 클래스에서 주입되어야 하는가? 대신 MemberController는 FacesContext 객체를 obatin하기 위해 register() 메소드에서 "FacesContext.getCurrentInstance()"를 직접 사용할 수 있습니까? 그렇게하는 것이 훨씬 간단 해 보입니다.
2) @ 모델을 @Singleton으로 교체 할 수 있습니까? 아니면 심지어 @ApplicationScoped?
감사합니다. 정적 팩토리 메소드를 사용하여 얻을 수있는 FacesContext의 istead를 주입
는 MemberController.java
@Model
public class MemberController {
@Inject
private FacesContext facesContext;
@Inject
private MemberRegistration memberRegistration;
@Produces
@Named
private Member newMember;
@PostConstruct
public void initNewMember() {
newMember = new Member();
}
public void register() throws Exception {
try {
memberRegistration.register(newMember);
FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_INFO, "Registered!", "Registration successful");
facesContext.addMessage(null, m);
initNewMember();
} catch (Exception e) {
String errorMessage = getRootErrorMessage(e);
FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMessage, "Registration unsuccessful");
facesContext.addMessage(null, m);
}
}
}
Resources.java
public class Resources {
// use @SuppressWarnings to tell IDE to ignore warnings about field not being referenced directly
@SuppressWarnings("unused")
@Produces
@PersistenceContext
private EntityManager em;
@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
@Produces
@RequestScoped
public FacesContext produceFacesContext() {
return FacesContext.getCurrentInstance();
}
}
"@Model"은 기능상으로 "@RequestScoped"+ "@Named "? 감사. – marlon
또한 회원 필드에 @Produces가 주석 된 이유는 무엇입니까? 멤버 클래스를 필요로하는 클래스에 직접 삽입 할 수 없습니까? – marlon
예 "@Model"은 "@RequestScoped"및 "@Named"에 대한 스테레오 타입이므로 기능적으로 동일합니다. "@Produces"어노테이션은 EntityManager의 인스턴스를 생성하는 팩토리 메소드 (여기서는 필드) 패턴을 단순히 '구현'한다. 다른 곳에서는 "@PersistenceContext"를 사용하여 EntityManager를 직접 삽입 할 수도 있지만이 리소스 생성자 패턴의 CDI를 사용하면 "@Inject"를 사용하고 한정자를 사용하여 다른 인스턴스를 주입 할 수 있습니다. 이것은 f.i 일 것입니다. 서로 다른 데이터베이스에서 작동하는 2 개의 EntityManager 인스턴스가 필요할 경우가 될 수 있습니다. – shillner