[스프링] 어노테이션(Annotation)

손성우·2021년 7월 20일
0

스프링

목록 보기
2/9


출처 : https://codevang.tistory.com/256

@Autowired

타입 -> 이름 -> @Qualifier -> 실패
스프링 프레임워크에서 지원하는 어노테이션.
스프링 컨테이너에 담겨진 의존객체를 주입할때 타입을 찾아서 연결(의존객체주입)한다.

@Autowired
	private SqlSessionTemplate sql;
	// 변수타입(SqlSessionTemplate) 에 따라 Spring 컨테이너가 알아서 root-context.xml 에 생성된 org.mybatis.spring.SqlSessionTemplate 의 bean 을 변수에 주입시켜준다.
	*/

@Inject

타입 -> @Qualifier -> 이름 -> 실패
자바에서 지원하는 어노테이션. javax 라이브러리 의존성을 추가해야함.
같은 타입의 Bean 객체가 여러 개 있다면 다음은 이름으로 찾는데, 그래도 없다면 예외가 발생. 부모 클래스 타입에다가 여러 자식 클래스의 Bean 객체 중 하나를 오버라이딩 시키는 경우 발생할 수 있는 문제다. 따라서 @Named 어노테이션을 사용해 정확한 Bean ID를 지정해주는 것이 좋다.

@Inject	
	@Named("sqlSessionFactory")
	private SqlSessionFactory sqlFactory;

@Resource

이름(bean id) -> 타입 -> @Qualifier -> 실패
필드명 또는 생성자 파라미터 변수의 이름과 Bean 객체의 ID를 매핑시켜서 먼저 찾는 방식
만약 매핑되는 ID가 없으면 타입을 검색해서 찾아줍니다. 그런데 같은 타입도 없다면 예외를 발생
타입 또는 이름이 항상 맞으면 좋겠지만 오버라이딩을 사용하는 경우 둘 다 달라질 수 있기 때문에 항상 이름을 명시해서 사용해주는 것이 나중에 보기도 좋고 안정적.

@Resource(name="SqlSessionTemplate")
	private SqlSessionTemplate sqlsession;

파라미터 매핑

@RequestParam

View를 통해 파라미터를 전달받는다.
@RequestParam("name", required = "", defaultValue ="") 데이터타입 데이터이름
required의 기본값은 true. false로 지정하지 않고 널값을 전송하면 에러뜬다.
defaultValue는 값이 없을 경우 설정된 값으로 매핑해 준다.
1:1로 매핑

@Controller
public class boardController{
	@RequestMapping("/boardContent")
    public String getBoardContent(@RequestParam("bno") int bno, Model model){
    	
        BoardVO boardVO = boardService.getBoardContent(bno);
        model.addAttribute("boardVO", boardVO);
        return "/boardContent";
    }
}

@ModelAttribute

요청한 값을 객체와 매핑해준다.

@Controller
public class boardController{
	@RequestMapping("")
    public String getMemberInfo(@ModelAttribute MemberVO memberVO ){
    	 
        return "";
    }
}
  • Name과 Id를 변수로 가지는 MemberVO객체가 존재한다면 이 객채에 바인딩된다.(Setter필수)
  • form태그에 name부분과 객체의 변수 이름이 같아야 한다.
  • QueryString 및 Form형식만 처리할 수 있다.

@RestController

@Controller 어노테이션과 @ResponseBody 어노테이션을 합쳐놓은 것.
클래스 상단에 @RestController을 선언하면 메서드마다 @ResponseBody를 붙이지 않아도 된다.

@RequestBody

클라이언트에서 JSON으로 데이터를 서버에 보내면, 서버에서 HTTP 요청 본문(body)에 담긴 값들을 자바 객체로 변환시켜 저장하기 위해 @RequestBody로 받는다.

AJAX에서 아래와 같이 설정해야함.
data : JSON.stringify(object);
contentType: 'json'

public String updateReply(@RequestBody ReplyVO replyVO)

@ResponseBody

반대로 서버에서 클라이언트로 응답 데이터를 전송하기 위해서 자바 객체를 HTTP 응답 본문(body)에 객체로 변환하여 전송시키는 역할. 기본설정은 JSON.
(ViewResolver가 받지 않고 HttpMessageConverter가 동작, View 페이지가 아닌 반환값 그대로 클라이언트에 전달.)
VO의 프로퍼티와 JSON 객체의 프로퍼티이름이 일치해야 하고, getter/setter 필수[자바빈].
클래스 상단에 @RestController가 있으면 메소드에 안붙여도 된다.

@Component

XML에서 빈을 만드는 대신에 클래스명 앞에 @Component 어노테이션을 적어주면 해당 클래스는 bean으로 등록 되어진다. 단, 기본 생성자가 존재해야 한다.
(없는 경우 직접 servlet-context.xml에 설정해줘야 한다)
예.

<beans:bean id="id명" class="클래스명(풀네임)">
      <beans:constructor-arg>
         <beans:value>초기화할 파라미터</beans:value>    
      </beans:constructor-arg>
   </beans:bean>
profile
백엔드 개발자를 꿈꾸며 공부한 내용을 기록하고 있습니다.

0개의 댓글