복붙노트

[SPRING] PostConstruct가 두 번 호출됩니다.

SPRING

PostConstruct가 두 번 호출됩니다.

나는 사용한다,

내 콩은 @ PostConstruct의 init () 메소드를 두 번 호출하는 것으로 나타났습니다. 여기에 두 번 초기화 된 샘플 빈이 있습니다. web.xml이나 다른 것이 필요하다면 그냥 게시하십시오. 아이디어가 없습니다.

@ManagedBean(name = "userBean")
public class UserBean implements Serializable {

    private static final long serialVersionUID = -1347081883455053542L;
    @ManagedProperty(value = "#{param.username}")
    private String username;
    private Users user;
    private Authentication authentication;
    private StreamedContent avatar;

    @PostConstruct
    public void init() {
        System.out.println("userbean init and username: " + username);
        user = Users.findByUsername(username);
        authentication = SecurityContextHolder.getContext()
                .getAuthentication();
        if (user == null) {
            Navigator.redirect("/601");
            return;
        }
        if (user.isKeepPrivate() == true && !username.equals(authentication.getName())) {
            Navigator.redirect("/600");
            return;
        }
        avatar = new DefaultStreamedContent(UserUtils.getAvatar(user), "image/png");
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public StreamedContent getAvatar() {
        return avatar;
    }

    public void setAvatar(StreamedContent avatar) {
        this.avatar = avatar;
    }
}

해결법

  1. ==============================

    1.우리는 여기서이 문제를 가지고 있지만 WebSphere 6에서는 문제가 있습니다 (websphere에서 폭주 : D).

    우리는 여기서이 문제를 가지고 있지만 WebSphere 6에서는 문제가 있습니다 (websphere에서 폭주 : D).

    그래서 ... 우리는 @PostConstruct를 사용하는 약간의 해결 방법을 사용합니다 ... 아마 너를 도울 수있어.

    public boolean firstInit() {
        boolean firstInit= false;
            try {
                FacesContext context = FacesContext.getCurrentInstance();
                firstInit= context != null  && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
            } catch (Exception e) {
                firstInit= false;
            }
            return firstInit;
        }
    public void init(){
    if (firstInit()) return;
    //init methods
    }
    

    그리고 @PostConstruct 메서드는 동일한 요청에 대해 두 번 호출했는데 이것 역시 당신을 도울 수 있습니다 ...

    obs : 나는 코멘트를 쓸 수 없다 : /

  2. from https://stackoverflow.com/questions/21145238/postconstruct-is-called-twice by cc-by-sa and MIT license