Bean을 @Autowired를 통해서 자동주입 받을 수 있다.
스프링 코어에서 prototype(새로운 객체 생성)과 singleton(같은 객체에 반복)이 있다.
Spring MVC에서는 request,session,application의 기능을 잘 사용해야 한다.
*주입된 Bean은 요청 발생시 주입만 이루어지기 때문에!!! request에 자동으로 저장되지 않는다.!!!
따라서 jsp에 전달하기 위해서는 model을 통해서 전달해야 한다.
Bean을 생성하는 방법에는 2가지가 있다.
1. @Bean을 이용한 생성 2. @Component를 이용한 생성
1. @Bean을 이용한 생성
<RootAppContext.text>
@Bean
@RequestScope
public DataBean1 databean1(){
return new DataBean1();
}
@Bean
@RequestScope
public DataBean2 databean2(){
return new DataBean2();
}
Bean을 먼저 생성해주도록 한다. DataBean1과 DataBean2 이며, return은 생성자를 return한다.
2. @Component를 이용한 생성
<DataBean3.java>
@Component
@ReqeustScope
public String DataBean3{
private String data3;
private String data4;
//getteer(), setter()생성
}
==================================================
<DataBean4.java>
@Component
@RequestScope
public String DataBean4{
private String data5;
private String data6;
//getter() , setter() 생성
}
RootAppContext.java는 Bean을 생성하기 위한 전용 클래스이며 @Bean을 통해 생성했는데, 이번에는 직접 class에서 @Component와 @RequestScope를 통해 등록한다.
2가지 방법 모두 @RequestScope를 가지고 있기 때문에, 요청이 왔을 때 Bean에 등록이 된다.
<TestController.java>
@Autowired
DataBean1 requestBean1;
@Resource(name="requestBean2")
DataBean2 requestBean2;
@Autowired
DataBean3 requestBean3;
@Resource(name="requestBean4")
DataBean4 requestBean4;
@Bean을 이용하든지, @Component를 이용하던지 controller에서 사용은 같다. @Autowired를 사용하면, Bean 주입이 되고 사용이 가능하다. 각 클래스가 가지고 있는 setter()함수를 통해 값을 설정할 수 있으며 getter()함수를 통해 설정 한 값을 출력 해 볼 수 있다.
<TestController.java>
@GetMapping("/test1")
public String test1() {
requestBean1.setData1("문자열1");
requestBean1.setData2("문자열2");
requestBean2.setData3("문자열3");
requestBean2.setData4("문자열4");
requestBean3.setData5("문자열5");
requestBean3.setData6("문자열6");
requestBean4.setData7("문자열7");
requestBean4.setData8("문자열8");
//foward는 새로운 요청을 하지 않기 때문에 그냥 result1으로 객체가 넘아간다.
return "forward:/result1";
}
forward는 새로운 요청을 하지 않으므로, result1에 그대로 객체의 정보가 이동을 한다.
@GetMapping("/result1")
//public String result1(HttpServletRequest request) { <- 정보가 제대로 전달되지 못한다.
public String result1(Model model) {
System.out.println(requestBean1.getData1());
System.out.println(requestBean1.getData2());
System.out.println(requestBean2.getData3());
System.out.println(requestBean2.getData4());
System.out.println(requestBean3.getData5());
System.out.println(requestBean3.getData6());
System.out.println(requestBean4.getData7());
System.out.println(requestBean4.getData8());
model.addAttribute("requestBean1", requestBean1);
model.addAttribute("requestBean2", requestBean2);
model.addAttribute("requestBean3", requestBean3);
model.addAttribute("requestBean4", requestBean4);
return "result1";
}
여기서 주의할 것은, @Autowired는 Bean의 주입만 해 줄 뿐, request객체에 저장하지는 않는다.!!
따라서 model을 통해서 값을 저장해야 jsp에 정상적으로 출력할 수 있다.
'Spring > Spring MVC 5' 카테고리의 다른 글
유효성 검사 (0) | 2020.05.27 |
---|---|
Properties / Message (0) | 2020.05.27 |
RequestScope (0) | 2020.05.26 |
Redirect와 Forward (0) | 2020.05.26 |
Form 커스텀 태그 (0) | 2020.05.25 |