JAVA, Spring 어노테이션 정리

안석우(문과대학 철학)·2024년 2월 16일

스프링

목록 보기
6/15

@Transactional

  • 기본적으로 JPA에서 데이터에 손을 대는 것들은 @Transactional이 있어야한다.
  • class레벨에 @Transactional를 쓰면 Public 메서드에는 기본적으로 @Transactional아 걸려들어간다.
  • @Transactional이 @Test와 함께 작용하면 롤백해서 commit이 안 나간다.

옵션
readOnly = true는 데이터 조회만 하겠다는 뜻으로 조금 더 조회에 맞게 최적화 시켜준다.

@SpringBootTest

스프링부트를 띄운 상태로 테스트를 하겠다.

@RunWith(SpringRunner.class)

JUNIT실행할 때 스프링이랑 같이 실행하겠다.

@RequiredArgsConstructor

의존성 주입 중 생성자 주입을 아무런 코드없이 할 수 있게 해준다.(@Autowired의 대체재라고 할 수 있다.)
final이 붙은 필드니 @NonNull이 붙은 필드들을 parameter로 하는 생성자를 만들어준다. lombok** 라이브러리에서 가져온 어노테이션

@Test

테스트 메서드임을 나타냄

옵션

  • @Test( expected = Exception.class)
    이 테스트를 돌리면 Exception이 발생해야 정상적으로 테스트가 실행되고 Exceptiond이 발생하지 않으면 에러남

@RequestMapping

예시
@RequestMapping(value = "/hello", method = RequestMethod.GET)

/hello 경로로 들어온 get요청을 아래의 메서드로 처리하겠다.

@RequeestParam

Http 요청 파라미터의 이름으로 바인딩하여 그 값을 변수에 저장.

@PostMapping("/order")
    public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count){
        orderService.Order(memberId,itemId,count);
        return "redirect:/orders";
    }
<form role="form" action="/order" method="post">
        <div class="form-group">
            <label for="member">주문회원</label>
            <select name="memberId" id="member" class="form-control">
                <option value="">회원선택</option> <option th:each="member : ${members}"
                                                       th:value="${member.id}"
                                                       th:text="${member.name}" />
            </select>
        </div>
        <div class="form-group">
            <label for="item">상품명</label>
            <select name="itemId" id="item" class="form-control">
                <option value="">상품선택</option> <option th:each="item : ${items}"
                                                       th:value="${item.id}"
                                                       th:text="${item.name}" />
            </select>
        </div>
        <div class="form-group">
            <label for="count">주문수량</label>
            <input type="number" name="count" class="form-control" id="count"
                   placeholder="주문 수량을 입력하세요"> </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>

에서 name속성이 memberId,itemId,count인 태그에서 선택된 값을 넘겨준다.

@ModelAttribute

model객체: 모델 객체는 컨트롤러에서 생성된 데이터를 담아 view로 전달할 때 쓰이는 객체다. addAttribute("key", "value") 메서드를 통해 많이 전달한다.

@ModelAttribute("test") Test test가 메서드의 파라미터로 사용되면
1. Test객체를 자동으로 생성한다.(이 때, Test는 getter,setter가 있는 bean 객체여야한다.)
2. http로 넘어온 값들을 이름에 따라 자동으로 바인딩한다.
biz/test?testId=1&testName=2&testPwd=4 이런 식으로 http요청이 왔다고 하면 test객체에 testId,testName,testPwd라는 이름의 필드가 있다면 거기에 1,2,4를 각각 바인딩한다.
3. test객체는 자동으로 Model객체에 추가되고 View단으로 전달된다.ㄴ

참고: https://dev-coco.tistory.com/100

@Rollback

테스트에 @Rollback(false)를 붙여서 테스트가 끝나도 롤백하지 않아서DB에 테스트의 결과가 남도록 한다.

@ResponseBody

자바 객체를 json 기반의 Http 객체로 반환, @ResponseBody를 사용하고 객체를 반환하면 객체가 JSON으로 반환됨

@Controller
@ResponseBody
public class HelloController{
	@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
    	Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
}

참고: accounts.google.com/b/0/AddMailService

@AfterEach

이 어노테이션이 붙은 메서드를 각 테스트가 실행되고 난 뒤 실행한다(보통 DB를 초기화해주는 역할로 많이 쓴다.)

@AfterEach
public void afterEach() {
	memberRepository.clearStore();
}

@BeforeEach

이 어노테이션이 붙은 메서드를 각 테스트가 실행되기 전 실행한다.

0개의 댓글