我们可以进行db调用以在构造函数中设置所有初始值吗?

时间:2016-04-29 05:51:12

标签: java spring

// This is my LoginController
 public String login() throws InvoiceException{
        //HttpSession session ; 
        String email = this.getEmail();
        String password = this.getPassword();
        if(loginService.authenticateLogin(email, password) == true){
        System.out.println("Login Successful");
        customer = loginService.getCustomerBean(email);
        //Creating a new Session

        /*session = (HttpSession) sessionManager.getSession("CustomerInfo");
        session.setAttribute("CustomerId",customer.getCustomerId());
        session.setAttribute("email", customer.getEmail());
        session.setAttribute("CustomerName", customer.getFirstName());

        sessionManager.setSession("CustomerInfo", session);*/
        sessionManager.setSession("CustomerId", customer.getCustomerId());
        sessionManager.setSession("email", customer.getEmail());
        sessionManager.setSession("CustomerName", customer.getFirstName());
        return "ProfilePage";
    }
    else{
        setErrorMessage("Bad Username/Password");
    return "LoginOrRegister";
    }
}

/ *这是我的个人资料页面控制器的构造函数。 profileService在类的实例变量声明部分开始时自动装配。 sessionManager是类SessionManager的一个实例,它包含JSF中会话跟踪的get和set会话的方法。

我想显示用户的个人资料页面以及存储在DB中的所有值。但是当spring实例化bean要注入时,所有这些值最初都会被设置为null吗?我该如何设定这些初始值?服务类也是实例化的服务类,它是自动装配的。

public ProfilePageController(){
    sessionManager = new SessionManager();
    customerId = (Integer) sessionManager.getSession("CustomerId");
    email = (String) sessionManager.getSession("email");
    firstName = (String) sessionManager.getSession("CustomerName");

    try {
        customer = profileService.getCustomerBean(customerId);
    } catch (InvoiceException e) {
        e.printStackTrace();
    }

    this.setFirstName(customer.getFirstName());
    this.setLastName(customer.getLastName());
    this.setEmail(customer.getEmail());
    this.setPassword(customer.getPassword());
    this.setCity(customer.getCity());
    this.setState(customer.getState());
    this.setCountry(customer.getCountry());
    this.setPhoneNumber(customer.getPhoneNumber());
    this.setGender(customer.getGender());
    this.setZipCode(customer.getZipCode());
    this.setCustomerId(customer.getCustomerId());
}

1 个答案:

答案 0 :(得分:0)

那可能无法奏效。把自己放在春天的鞋子里。您需要创建一个ProfilePageController并自动装配其中的一些字段。你怎么能这样做?

好吧,为了在对象中设置字段,你需要那个对象。所以你需要先创建对象。你怎么能创建一个对象?通过调用它的构造函数,对吧?

但是您的构造函数尝试使用该字段,并且该字段仅在调用构造函数后才会自动装配。所以你得到一个NullPointerException。

有几种解决方案(可以合并)

  • 使用构造函数注入而不是字段注入。这是一个好主意:它使测试更容易,并使依赖更清晰
  • 在使用@PostConstruct注释的方法中进行初始化工作。