jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m
Spring

[Spring] Day03 (Code)

Spring

[Spring] Day03 (Code)

2022. 3. 22. 00:23

1. Restaurant.java

package com.test.sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component	//스프링이 관리할 객체라고 표시. <comtext:component-scan>이 가능
@Data //Restaurant의  getter/setter/toString/생성자 등등 다 자동 생성 
public class Restaurant {
	
	/*@Setter: 자동으로 setChef()를 컴파일 시 생성함.
	 * onMethod_: 생성되는 setChef()에 @Autowired 어노테이션을 추가. 
	 *            setChef(Chef) 메서드에 매개변수로 있는 Chef를 자동으로 주입하겠다.
	 * */
	
	//방법 1. @Autowired
	//방법2
	@Setter(onMethod_=@Autowired) 
	//세터를 통해서 자동주입이 된다. 즉 셰프의 셋 메서드를 통해서 주입 받겠다. 
	private Chef chef;
	
	/*Restaurant rt = new Restaurant(); --> 스프링이 객체 생성하도록
	 * -> rt.setChef(스프링이 객체 생성해둔 Chef 객체를 자동으로 매개변수 값으로 채우기);
	 * */
	
	//방법3. xml에서 <bean>으로 이 클래스 생성할 때, <property> 태그로 set메서도 호출하여 채우줘는 형태로 작성
	//component 스캔을 하면 이 방법은 문제가 생김. 
	
	
}

 

2. 레스토랑.java 사용하기 위해 root-context에 스프링빈 등록

<bean id="restaurant" class="com.test.sample.Restaurant"> 
		<property name="chef" ref ="chef1"></property>
	
	</bean>-->
	
	
	<context:component-scan base-package="com.test.sample"/> 
	<!-- 위에도 되고 이거도 됨. 이거는 자동으로 객체 생성. 
	[  ]-> root-context.xml -> Chef, Restaurant 생성-> Restaurant이 생성될 때 Chef가 주입됨-->

 

3. 테스트 파일. SampleTest.java

package com.test.sample;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.extern.log4j.Log4j;

/*@Runwith: 현재 테스트 코드가 스프링을 실행하는 역할을 할 것이라는 표시. 스프링에 있는 제이유닛4이용해서 돌릴거야.
 * @ContextConfiguration: 지정된 클래스나, 문자열을 이용해 필요한 객체들을 스프링 내에 객체로 등록하게 해줌. 
 * ()안에 문자열은 'classpath:'나 'file:'을 이용할 수 있다. 여기서는 파일의 전체 경로를 줌.
 * @Log4j: 로그 관련 사용하겠다.  
 * */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j

public class SampleTest {
	/*
	@Autowired
	private Restaurant restaurant;

	//Chef, Restaurant 빈이 생성 잘 되었는지 체크하는 메서드
	@Test
	public void testExist() {
		assertNotNull(restaurant);//null이 아니면 테스트 성공으로 체크해주는 메서드
		System.out.println(restaurant);
		System.out.println(restaurant.getChef());
		
	}
	//실행 방법: run - run as - junit test.
	
	@Autowired
	private HelloBean hello;
	
	@Test
	public void helloTest() {
		log.info(hello); 
		log.info(hello.getNum());
		log.info(hello.getMsg());
		log.info(hello.getReg());
	}
	*/
	
	
}

 

 

4. 롬복. SampleHotel.java

//롬복

package com.test.sample;

import org.springframework.stereotype.Component;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Component //스프링이 관리할 객체라고 선언
@ToString //투스트링 자동 생성
@Getter //Get 메서드 자동 생성 (클래스에 붙이면 모든 변수에 적용)
//@Setter //Set 메서드 자동 생성

//클래스 레벨에서 생성자 만들기. 
//@AllArgsConstructor  //모든 인스턴스 변수를 생성자 매개변수로 갖는 생성자 생성
//@NoArgsConstructor //기본 생성자 자동 생성
//@RequiredArgsConstructor //원하는 변수들을 매개변수로 갖는 생성자 생성
//변수 위에 @NonNull이나 final이 붙은 변수에 대해서만 생성자에 매개변수로 포함.
public class SampleHotel {
	
	//@Setter //set메서드 자동생성 (변수에 각각 붙이면 해당 변수에만 적용)
	//@NonNull
	private Chef chef;
	
	public SampleHotel(Chef chef) {
		this.chef = chef;
	} //변수 하나에 생성자 하나면 알아서 채워준다...근데 알아보기 힘드니까 세터 등을 이용해서 명시해준다.
	
	private int num;

}

 

 

5.  스프링빈 

Hellobean.java

package com.test.sample;

import java.util.Date;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class HelloBean {
	
	private int num;
	private String msg;
	
	private Date reg;
	
	
	public HelloBean(int num, String msg) { //빈으로 등록할때 무조건 매개변수 채워줘야함
		this.num=num;
		this.msg=msg;
	}
	
}

root-context 추가

<property>

<bean id="date" class="java.util.Date"/>
<!--reg 위해서..-->

<!--3교시. 프로퍼티 스프링이 객체 생성. 기본 생성자 자동으로 호출 
	<bean id="hello" class="com.test.sample.HelloBean"/>-->	
	<!-- 값을 채워주면서 객체 생성. 하려면 셋 메서드가 필요.헬로빈에서 세터 생성 -->
	<bean id ="hello" class="com.test.sample.HelloBean">
		<property name="num" value="10"/>
		<property name="msg" value="spring is coming"/>
		<property name="reg" ref="date"/>
	</bean>
	<!-- HelloBean hello = new HelloBean();
	hello.setNum(10);
	hello.setMsg("Spring is coming"); 과 동일하다. 
	reg는 위에서 선언한 데이트 타입 객체를 넣어준다.-->

<constructor-arg>

<!-- 4교시 -->
	<bean id ="hello" class="com.test.sample.HelloBean">
		<constructor-arg index ="0" value="100"/>
		<constructor-arg index ="1" value="message"/>
		<property name="reg" ref="date"/>
	</bean>

 

 

6. TestController

package com.test.controller;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.test.model.TestDTO;

@Controller
@RequestMapping("/day03/")
public class TestController2 {
	@GetMapping("test01")
	public void test01(String a) {
		System.out.println("/day03/test01 호출");
		System.out.println(a);
	}
	
	//form페이지 요청
	@GetMapping("form")
	public void form() {
		System.out.println("form 요청@");
	}
	
	//폼에서 submit 눌러서 요청 되는 pro 요청 매핑
	//http://www.localhost:8080/day03/pro?id=java&pw=123 넘어오는 데이터
	@GetMapping("pro")
	//1. 매개변수 나열해서 하나씩 따로 받기
//	public void pro(String id, int pw){ //형 변환할 필요 없이 바로 자동으로 형변환해줌
	//2. DTO 안에서 자동으로 바인딩해서 받기: 이때 바인딩 되는 객체 안에는 setter 존재해야함.
	public void pro(TestDTO dto, HttpServletRequest request, HttpServletResponse response){
		System.out.println("pro 요청!");
		System.out.println("request: " + request);
		System.out.println("request: " + request.getRequestURI());
		
//		System.out.println("id: "+id);
//		System.out.println("pw: "+pw);
//		
//		System.out.println(dto); //출력결과: TestDTO(id=java, pw=123)
//		System.out.println(dto.getId());
//		System.out.println(dto.getPw());
	}
	
	
	// 브라우저에 ...8080/day03/ex01?name=abc&age=10 입력할 것임.
	@GetMapping("ex01")
	//@RequestParam: 요청할 때 넘어온 파라미터를 명시적으로 매개변수 앞에 붙여서 
	//해당 파라미터는 이 매개변수에 담아야 된다고 알려주는 것. 
	//어노테이션을 붙이면 매개변수 이름은 파라미터 이름과 달라도 괜찮다. 
	public void ex01(@RequestParam("name") String myname, 
			@RequestParam("age")int myage) { //RequestParam: 넘어오는 파라미터를 age란 이름으로 myage에 담아라
		System.out.println("ex요청");
		System.out.println("name: "+ myname);
		System.out.println("age: "+ myage);
	}
	
	//3 ArrayList로 받기
	//day03/ex02?arr=a&arr=b&arr=c
	@GetMapping("ex02")
	public void ex02(@RequestParam("arr") ArrayList<String> arr) {
		//RequestParam 을 이용하여 넘어오는 데이터를 명시해주기.
		System.out.println("ex02 요청");
		System.out.println(arr);
	}
	
	//4.배열로 받기 
	@GetMapping("ex02")
	public void ex03(String [] arr2) {
		//RequestParam 을 이용하여 넘어오는 데이터를 명시해주기.
		System.out.println("ex02 요청");
		System.out.println(arr2);
		for(String a: arr2) {
			System.out.println(a);
		}
		
	}
	
	//뷰에 데이터 보내기
	@GetMapping("ex03")
	public void ex03(HttpServletRequest request, Model model) {
		System.out.println("ex03 호출");
		//key, value 형태로 request 객체에 속성 추가
		request.setAttribute("name", "피카");
		
		//model객체에 속성 추가
		model.addAttribute("name2", "터미네이터");
	}
}

 

    'Spring' 카테고리의 다른 글
    • [Spring] Day04 (Code)
    • [Spring] Day04 (Note): EL, JSTL, Model
    • [Spring] Day03 (Note): 테스트, 스프링 빈, 파라미터 전달, Model
    • [Spring] Day02 (Code)

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.