/
@Controller
@RequestMapping("/member")
public class MemberController {
...
@GetMapping("/join")
public String join(RequestJoin form) {
...
}
}
GET /member/join
@Controller
public class MemberController {
...
@GetMapping("/member/join")
public String join(RequestJoin form) {
...
}
}
GET /member/join
찾은 컨트롤러 객체의 메서드를 실행
보통 요청이 들어오면 사용자 요청 데이터가 있을 것
보통 요청 데이터를 조회 할 때는 HttpServletRequest에 있는 getParameter를 가지고 조회 -> 전부다 값이 문자열
요청 메서드에 정의된 매개변수 유형에따라 요청 데이터를 자료형에 맞게 자동 주입 -> 실행
서블릿 기본 객체도 매개변수에 정의되어 있으면 자동 주입(HttpServletRequest, HttpServletResponse, HttpSession)
객체 관리의 자동화 -> Reflection API
Class 클래스 -> 각 구성 요인 Constructor 객체, Method 객체, Field 객체 ..
java.lang.Class
Constructor[] getConstructors()
: public 범위의 생성자 메서드를 조회 Constructor[] getDeclaredConstructors()
: 모든 범위의 생성자 메서드를 조회(private, default, protected, public)ㄴ PathVariable : 경로변수
ㄴ RequestParam : 쿼리스트링 값 혹은 바디데이터에서 일치하는 값이 있으면 주입 = 요청데이터의 이름, get도 되고 post도 됨
ㄴ RequestJoin : 데이터 클래스
ㄴ 여기 있는 데이터 이름과 동일한 요청데이터가 있다
-> 전부다 알아서 setter를 호출해주고 다 주입된다
-> 데이터클래스는 무조건 setter 와 getter가 있어야 함
-> HandlerAdapter쪽에서 setter를 데이터클래스 이름을 보고 동적으로 호출해주고 값을 넣어준다 자료형도 알아서 변환해줌
ㄴ 데이터를 출력해보려구 값을 넣어봄
ㄴ 따로 HttpServletRequest를 하지 않아도 다 출력될 것임
ㄴ 경로변수 = 바뀌는 데이터 = 이 데이터는 변수값으로 주입된다
ㄴ 유입됨
ㄴ PathVariable : 경로변수
ㄴ 기본생성자 정의
ㄴ 매개변수가 있는 생성자 정의
Class Class<T>
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Class.html
java.lang.Class
Constructor[] getConstructors()
: public 범위의 생성자 메서드를 조회 Constructor[] getDeclaredConstructors()
: 모든 범위의 생성자 메서드를 조회(private, default, protected, public)Constructor[] getConstructors()
, Constructor[] getDeclaredConstructors()
의 반환값 자료형
= T newInstance(Object... initargs)
의 자료형
ㄴ 생성자 목록이 나옴(단, 접근제어자가 public인 것만)
ㄴ 모든 생성자 목록이 나옴
ㄴ 클래스클래스통해 클래스 정보 가져옴
ㄴ Constructor[] getDeclaredConstructors()
: 해당 클래스의 모든 생성자 목록 출력
ㄴ 이 constructor안에는 동적으로 객체를 만들 수 있는 기능이 있음
java.lang.reflect(reflect API)_
Class Constructor<T>
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html
Class Constructor<T>
T newInstance(Object... initargs)
Constructor[] getConstructors()
, Constructor[] getDeclaredConstructors()
의 반환값 자료형
= T newInstance(Object... initargs)
의 자료형
T newInstance(Object... initargs)
를 쓰는 이유!
ㄴ T newInstance(Object... initargs)
: 객체를 통적으로 생성할 수 있는 메서드 = 직접 new를 하지 않아도 생성 가능
ㄴ 매개변수가 있는 생성자는 전개연산자 부분에 넣으면 됨?
ㄴ T new Instance(Object... initargs)
통해 기본생성자를 동적으로 객체 생성함
ㄴ 반환값이 object라 강제형변환
ㄴ 매개변수가 있는 생성자도 동적으로 객체 생성해줌
java.lang.reflect(reflect API)_Class Constructor<T>
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/reflect/Constructor.html
T new Instance(Object... initargs)
int getParameterCount()
Class<?>[] getParameterTypes()
Annotation[][] getParameterAnnotations()
ㄴ 생성자 매개변수의 갯수
ㄴ 배열형태로 반환되니까 length사용 가능
ㄴ 순서대로 자료형도 알 수 있음
ㄴ 매개변수가 한개인지 두개인지 아애없는지 자료형은 무엇인지 알 수 없음
ㄴ Object 배열은 공간이 한정적임
ㄴ 그래서 보통은 동적으로 유연하게 만들기 위해서 List형태로 만들고 toArray메서드 사용해서 배열로 바꿔서 투입