상세 컨텐츠

본문 제목

Annotaion 총 정리(프로젝트에서 사용한 것 기준)

JAVA/Spring

by 영공쁘이 2021. 8. 17. 12:35

본문

의존성 주입(DI), 데이터 제어, 데이터 이동, JUNIT, 스프링부트


@Autowired : 타입으로 의존성을 주입 [변수, 생성자, Setter 메서드, 일반 메서드 등에 적용]

@Resource : 이름으로 의존성 주입 [변수, Setter메서드 등]

  DI: 클래스 간의 의존 관계를 스프링 컨테이너가 연결해주는 것

    한마디로, 자동차 -> 세단, 포르쉐 가 있는데,

    사용자는 각각을 사용하는데 이는 자동차라는 의존관계가 존재함(*uml에서 dependency 관계)

@Qualifier : 아래 2가지의 기능

  1) @Autowired에서 연결한 빈 목록 중, 특정(유일)한 빈을 등록하는 것 @Qualifier(value ="빈이름") 

  2) 연결할 빈의 타입을 지정하는 것[springbeans.xml에 선언한 이름을 작성]

 

@Qualifier 설명을 뒷받침 할 사진

 


@Controller : MVC 패턴에서 view 반환을 위한 것, View를 반환하기 위해서는 ViewResolver가 사용된다.

MVC 패턴과 동시에, Dispatcher servlet의 역할

@RestController : RestController는 JSON형태로 객체 데이터를 반환하는 것

 RestController는 @ResponseBody가 같이 적용이 되어, 따로 명시 안해도 되고 역할은 HTTP본문에 자바객체가 매핑되어 데이터가 보내지는 것!(단, Controller에서는 따로 명시해야함(@ResponseBody를)

Controller와 ResponseBody를 이용한 구조

* 스프링에서 필요한 비동기 처리 애노테이션(데이터 형식: JSON)

> 여기서 비동기란?

  데이터를 클라이언트와 서버가 상호 작용을 할 때, 화면이 갱신 되어도 데이터가 그대로 남아있는 것

  그래서, 각각의 데이터는 본문(Body) 이라는 곳에 데이터를 담아둬야 한다.(그래야 데이터가 유지되는 것)

 

@RequestBody: 요청 본문[HTTP요청 바디 >자바 객체] : 요청 본문에 담긴 값들을 변환 시켜 객체에 저장

@ResponseBody: 응답 본문[자바 객체 > HTTP요청 바디] : 응답을 전송하기 위해 자바를 Http본문 객체로 변환하여

전송

 


객체 생성하여 입출력을 도와주는 것

@ModelAttribute : 한마디로, 객체를 만들어서 값들을 연결하고 출력까지 도와주는 애노테이션

 

  1) @ModelAttribute("boardDTO") BoardDTO boardDTO: "boardDTO"의 객체를 자동으로 생성한다.

  2) 생성된 boardDTO(오브젝트)에 Http 요청 본문으로부터 나온 값들을 바인딩시켜주는 것!

(해당 변수의 setter를 이용하여 데이터를 적용시킨다)
  3) 이 객체가 자동으로 Model에 추가되고 추가된 객체는 view단 까지 전달이 됨(한마디로 데이터 입출력이 가능해짐!)


지정 경로 밑에 데이터를 처리

@PathVariable :  url에서 각 구분자에 들어오는 값을 처리해야 할 때 사용

    예) /mypage/service/{no} 여기에서, no를 처리할 때 사용하는 애노테이션이다.

@GetMapping("/mypage/service/{no}")
	public ModelAndView mypageVocView(@PathVariable int no,HttpSession session) {
		Qna qna = qnaMapper.findByNo(no);
		Qnares qnares = qnaMapper.findByQno(qna.getNo());
		Member member = memberMapper.findByNo((Integer)session.getAttribute("no"));
		
		ModelAndView mv = new ModelAndView();
		mv.setViewName("/mypage/vocView");
		mv.addObject("member", member);
		mv.addObject("qna", qna);
		mv.addObject("qnares", qnares);
		
		mv.addObject("css", "mypage/voc.css");
		mv.addObject("js", "mypage/voc.js");
		
		return mv;
  }

여기서, 들어온 값(no)을 필요할 때 사용할 수 있다. 

 

@RequestParam: HttpServletRequest와 같은 역할을 한다.(이는 파라미터 값을 넘기고 가져올 수 있도록)


Mapping을 위한 기본 설정

@RequestMapping: http request로 들어오는 url을 특정 Controller 클래스나 메소드로 연결시킨다.

@Repository: DAO라는 것을 알리기 위함(DB에 접근하는 모든 코드가 모인 곳)

@Service: 비즈니스 로직과 관련된 모든 코드가 모인 곳(중간자 역할)

@Transactional: 처리한 쿼리를 자동 RollBack 해주기 위한 애노테이션


Bean 처리

@Configuration: 스프링에게 해당 클래스를 Bean 구성 클래스임을 알려주는 것

@EnableTransactionManagement: 자바 형식으로 트랜잭션 처리를 허용해 주는 것

@Bean: DI에 관리되는 자바 객체(@Configuration과 무조건 같이 써야 함!)

  @Component: 자신이 만든 클래스를 Bean으로 등록하는 것

@MapperScan: 해당 베이스패키지 내에서 DAO를 검색하여 등록하는 것

  예) @MapperScan(basePackages = {"com.delluna"})

      이것은 내가 했던 com.delluna.hotels라는 패키지의 베이스 패키지 이름이다.

@RequestMapping: http request로 들어오는 url을 특정 Controller 클래스나 메소드로 연결시킨다.

@Mapper: 해당 클래스는 빈으로 등록되며 Service단에서 Autowired하여 사용할 수 있다.

여기서 각각의 sql문들을 선언한다.


JUnit 

- 기본 지식: mockito (단위 테스트를 위한 java mocking framework)

 

@Mock : Mock객체를 생성함(가짜모듈)

@InjectMocks : 생성한 Mock객체를 주입하여 사용하도록 한다.(여기서 쓰는 객체를 mock으로 가져다 만들어 쓰는 것)

@RunWith(MockitoJUnitRunner.class), @ExtendWith(MockitoExtension.class) : 버전 4에서는 Run 5에서는 Extend

   Mockito에서 Mock객체를 사용하기 위한 애노테이션(class위에 달아준다!)

@ContextConfiguration:

스프링 컨테이너빈을 추가하기 위해서는 application-context.xml 파일과 같은 설정 파일을 읽어야한다.

이런 설정 파일을 로드하기 위해 필요한 애노테이션

@WebAppConfiguration : Controller및 web환경에 사용되는 빈들을 자동으로 생성하여 등록

@BeforeEach : 공통 파라미터 및 설정 시 사용

@AfterEach : 사용되고 난 후 종료되어야할 리소스를 처리하는 부분이다.

@Test : 테스트를 만드는 모듈 역할(직접 테스트하는 메소드)


SpringBoot

 

@SpringBootApplication: 스프링부트에 필요한 가장 기본적인 설정을 선언한다

@ComponentScan:  @component , @Service, @Repository, @Controller 등을 스캔하여 Bean으로 등록해준다

@EnableAutoConfiguration: 특정 조건에 만족하는 라이브러리(사전에 정의함)들을 Bean으로 등록해주는 것

@Repository(클래스 명(여기서는 Mapper Interface)) : 해당 클래스가 데이터베이스에 접근하는 클래스임을 명시하는 것

'JAVA > Spring' 카테고리의 다른 글

Oracle과 SpringBoot  (0) 2021.08.28
형상관리 및 was  (0) 2021.08.24
sts를 이용한 board 뷰들  (0) 2021.08.09
sts를 이용한 member의 뷰 파일들  (0) 2021.08.09
Board관련 sts 코드  (0) 2021.08.09

관련글 더보기