복붙노트

[SPRING] 봄 mvc 모든 요청으로 만든 새 콩 개체가 있나요?

SPRING

봄 mvc 모든 요청으로 만든 새 콩 개체가 있나요?

Dispatcher 서블릿을 사용하여 봄 MVC에서 단 하나의 bean 객체 만 생성되거나 요청마다 새로운 객체가 생성된다는 것을 이해할 수 없습니까?

컨트롤러 코드 : -

코드에서 나는 LoginBean 객체의 데이터를 설정하고 abc 메소드의 modelandview 객체에 설정합니다.

그런 다음 JSP로 내가 usename에 대한 값을 입력하지 않는 경우, 그 때 양식을 제출할 때 핸들러 메서드 (initform)가 호출 될 때 나에게 어떤 값도 지정하지 않는 동일한 lb.getusername을 인쇄하려고합니다. 개념을 이해할 수 없습니다.

@Controller
public class LoginController{
ModelAndView mv=null;
EmployeeBean e=new EmployeeBean();
AutoBean autobean;
@Autowired
public LoginController(AutoBean autobean){
    System.out.println("autobean");

    this.autobean=autobean;
}
    @RequestMapping(value="/login")
    public ModelAndView abc(){

        System.out.println("here");
        System.out.println("here1");
        LoginBean lb=new LoginBean();
        lb.setUsename("ankita");//setting value
        return new ModelAndView("login","loginbean",lb);
    }

    @RequestMapping(value="/abc1",method=RequestMethod.POST)
    public ModelAndView initform(@ModelAttribute("loginbean")LoginBean      lb,BindingResult result,Model model){
        System.out.println("*****"+result.getErrorCount());
        System.out.println("hello");
        autobean.setName("yayme");
        System.out.println(autobean.getName());
        model.addAttribute("autobean", autobean);
        System.out.println("username"+lb.getUsename());// query??
        if(lb.getPassword().equals("ankita"))
        /*{
            mv=new ModelAndView();
            e.setId("1001");
            e.setName("ankita");
            mv.addObject("employee", e);
            mv.addObject("emp", new Emp());

            mv.setViewName("success");
            return mv;
        }*/
        return new ModelAndView("success","emp",new Emp());
        else
            return new ModelAndView("fail","lb1",lb);
    }

login.jsp

<form:form action="abc1" commandName="loginbean">
username:<form:input path="usename" />
password:<form:password path="password"/>
<input type="submit"/>
</form:form>

제발?

해결법

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

    1.Spring의 애플리케이션 컨텍스트 (Bean 라이프 사이클을 인스턴스화에서 파기까지 관리하는 Bean IoC 컨테이너)에는 Bean 정의가 포함되어있다. 다른 속성들 사이의 이러한 정의는 소위 스코프 (scope)를 포함합니다. 이 범위는 다음 값을 가질 수 있습니다.

    Spring의 애플리케이션 컨텍스트 (Bean 라이프 사이클을 인스턴스화에서 파기까지 관리하는 Bean IoC 컨테이너)에는 Bean 정의가 포함되어있다. 다른 속성들 사이의 이러한 정의는 소위 스코프 (scope)를 포함합니다. 이 범위는 다음 값을 가질 수 있습니다.

    다음과 같은 몇 가지 특별한 범위를 가질 수 있습니다.

    자신 만의 범위를 만들 수도 있습니다. bean의 기본 범위는 singleton입니다. 따라서 별도로 지정하지 않으면 bean은 singleton (응용 프로그램 당 단일 인스턴스)입니다.

    @ Component와 유사한 주석 (@Controller 등)으로 주석이 추가 된 클래스를 검색하는 component-scan을 사용하는 경우 이러한 클래스는 응용 프로그램 컨텍스트에서 자동으로 Bean 정의로 등록됩니다. 기본 범위가 해당 범위에도 적용됩니다.

    자동 등록 빈의 범위를 변경하려면 @Scope 주석을 사용해야합니다. JavaDoc을 사용하는 방법을 알고 싶다면 JavaDoc을 확인하십시오.

    TL; 귀하의 LoginController는 싱글 톤입니다.

  2. from https://stackoverflow.com/questions/17067574/is-there-a-new-bean-object-created-with-every-request-in-spring-mvc by cc-by-sa and MIT license