@Component
개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용하는 Annotation
Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록합니다.
- MVC패턴에 맞게 구체적으로 등록 가능
@Controller
Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation
Controller 빈 스캐닝을 통해 자동으로 빈 등록
- 예제)
@Controller //Controller타입의 어노테이션을 붙여주면 BeanScanning을 통해서 자동으로 bean등록
public class MemberController {
@Service
Service Class에서 쓰인다.
비즈니스 로직을 수행하는 Class라는 것을 나타내는 용도이다
Component보다 더 구체화해서 Service bean으로 등록
- 예제)
@Service //Component보다 더 구체적
public class MemberServiceImpl implements MemberService {
@Repository
DAO class에서 쓰인다.
DataBase에 접근하는 method를 가지고 있는 Class에서 쓰인다.
주로 DB(저장소)와 관련된 작업("영속성"작업을 처리하겠다라는 뜻)
- 예제
@Repository
public class MemberDao {
@RequestMapping
@RequestMapping(value=”“)와 같은 형태로 작성하며, 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행 Controller 객체 안의 메서드와 클래스에 적용 가능, value생략 가능("")
HandlerMapping 등록
- Class 단위에 사용하면 하위 메소드에 모두 적용
- 메소드에 적용되면 해당 메소드에서 지정한 방식으로 URI를 처리
- 예제)
- value O
@RequestMapping(value="login.me")
public ModelAndView loginMember(Member m,
ModelAndView mv,
HttpSession session) {
- value X
@RequestMapping("logout.me")
public String logoutMember(HttpSession session) {
@RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용합니다. Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킵니다.
- @RequestParam어노테이션을 이용하는 방법
request.getParameter("key")로 value를 뽑아오는 역할을 대신해주는 어노테이션
value속성의 값으로 jsp에서 작성했던 name속성값을 담으면 알아서 해당 매개변수를 받아올 수 있다.
만약, 넘어온 값이 비어있는 형태라면 defaultValue속성으로 기본값을 지정할 수 있다.
@RequestMapping("login.me")
public String loginMember(@RequestParam(value = "id", defaultValue="aaa") String userId, @RequestParam(value="pwd")String userPwd) {
System.out.println("userId : " + userId);
System.out.println("userPwd : " + userPwd);
return "main";
}
- @RequestParam 어노테이션을 생략하는 방법
단, 매개변수명을 jsp의 name속성값(요청 시 전달하는 값의 키값)과 동일하게 세팅해둬야 자동으로 값이 주입
단점으로는 위에서 사용했던 defaultValue속성은 사용할 수 없음
@RequestMapping("login.me")
public String loginMember(String id, String pwd) {
System.out.println("userId : " + id);
System.out.println("userPwd : " + pwd);
Member m = new Member();
m.setUserId(id);
m.setUserPwd(pwd);
//Service쪽 메소드에 m을 전달하면서 조회
return "main";
}
@Autowired
Bean을 주입받기 위하여 @Autowired 를 사용, Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입
: D.I(Dependency Injection)응 이용하기 위해 달아놓음
- 예제
@Autowired
private MemberDao memberDao;
//sqlSessionTemplate객체를 사용해서 bean등록을 했었음
@Autowired
private SqlSessionTemplate sqlSession;
* 참고 : Bean을 주입받는 3가지
- @Autowired
- setter
- 생성자 (@AllArgsConstructor 사용) -> 권장방식
@ModelAttribute
: 요청 시 전달값을 담고자하는 VO클래스의 타입을 세팅
@RequestMapping("login.me")
public String loginMember(@ModelAttribute Member m) {
Member loginUser = memberService.loginMember(m);
if(loginUser == null) { // 로그인 실패 => 에러문구를 requestScopet에 담고 에러페이지로 포워딩
System.out.println("로그인 실패");
} else { // 로그인 성공 => loginUser를 sessionScopet에 담고 메인페이지 url로 재요청
System.out.println("로그인 성공");
}
return "main";
}
@ResponseBody
: 리턴하는 String타입이 응답 뷰 정보가 아니라 응답데이터라는 것을 선언
@ResponseBody // 데이터를 돌려보낼 때
@RequestMapping("idCheck.me")
public String idCheck(String checkId) { // 키값을 적어주기
int count = memberService.idCheck(checkId);
if (count > 0) { // 이미 존재하는 아이디 => 사용불가 (NNNNN)
return "NNNNN";
} else { // 시용 가능 (NNNNY)
return "NNNNY";
}
}
'클라우드 융합 Full-stack 웹 개발자 양성과정 > 헷갈리는 부분 정리 📋' 카테고리의 다른 글
<HTML> 절대경로와 상대경로 (0) | 2022.12.16 |
---|