삶 가운데 남긴 기록 AACII.TISTORY.COM
Spring 어노테이션 본문
Spring bean을 XML로 관리 할 수 있지만, bean객체가 많아지면 XML 설정도 많아져 불편해집니다.
그래서 나온 방법이 auto wiring(bean 연결) 과 annotation wiring(bean 연결) 입니다.
annotation wiring
어노테이션 와이어링을 사용하기 위해서는 context를 관리하는 XML 설정 파일에 context 네임스페이스를 추가해야 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<context:component-scan base-package="컴포넌트를 스캔할 패키지 경로(예:net.aacii.service)"/>
</beans>
<context:component-scan base-package="net.aacii.service" />
이렇게 패키지 이름을 component-scan 으로 지정해주면 Spring이 자동으로 bean을 스캔해서 발견해줍니다.
@Autowired
Spring의 기본 의존성 주입을 위한 어노테이션입니다.
필드, 생성자, setter 메서드에 사용할 수 있습니다.
타입 와이어링을 시도 한 후 실패하면 이름 와이어링으로 후보 bean을 찾습니다.
public class CustomerSerivceImpl implements CustomerService{
@Autowired
private CustomerRepository repository;
//...
}
와이어링 할 bean이 없는 경우
@Autowired(reqired=false)
를 지정하면 null 값을 허용하게됩니다.
아래와 같이 pom.xml에 dependency를 추가하면 @Inject 어노테이션으로 @Autowired 를 대체 할 수 있습니다.
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
또한 아래와 같이 pom.xml에 dependency를 추가하면 @Resource 어노테이션으로 @Autowired를 대체 할 수 있습니다.
이것은 JNDI 리소스 와이어링 방식입니다.
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
@Component
해당 클래스가 Spring bean을 명시하는 범용 어노테이션입니다.
이 때 클래스명의 첫 글자를 소문자로 한 이름이 default Spring bean의 이름입니다.
만약 이 Spring bean의 이름을 바꾸고 싶으면 아래 처럼 괄호안에 직접 지정해주면 됩니다.
@Component("바꿀이름")
@Repository
해당 클래스가 데이터를 엑세스하는 repository 즉, DAO 클래스를 명시합니다. 예를 들어
@Repository
public class MemberDAOImpl implements MemberDAO {
@Inject
private SqlSession sqlSession;
...
}
@Service
클래스가 비지니스 로직을 담당하는 서비스 객체임을 명시
@Controller
클래스가 MVC 패턴에서 컨트롤러임을 명시
@RequestMapping
특정 요청 URI에 매칭되는 클래스나 메소드임을 명시
@RequestParam
request 에서 특정 parameter를 찾음
@RequestHeader
request에서 HTTP헤더 정보를 추출
@PathVariable
URI에서 원하는 정보를 추출
@CookieValue
쿠키의 이름을 이용해 쿠키 값을 추출
@ModelAttribute
해당 객체를 뷰까지 전달 합니다. 예를 들어 아래처럼
@RequestMapping("doC")
public String doC(@ModelAttribute("msg") String msg) {
logger.info("doC is called.");
return "doC";
}
라고 했을 때 request시 msg라는 이름의 parameter를 메서드 내에서 String msg로 처리하고 뷰(jsp)에 msg라는 이름의 response parameter로 전달 됩니다.
@SessionAttribute
세션상에서 모델의 정보를 유지하고 싶은 경우 사용
@InitBinder
parameter를 수집해서 객체로 만들 경우에 커스터마이징
@ResponseBody
이 어노테이션이 적용된 메서드에서는 리턴되는 데이터 타입이 HTTP response로 전송 됩니다.
예를 들어 아래처럼 JSON을 리턴하도록 사용할 수 있습니다.
@RequestMapping("/doJSON")
public @ResponseBody ProductVO doJSON() {
ProductVO vo = new ProductVO("샘플제품",30000);
return vo; //JAVA 객체가 JSON으로 변환되어 리턴 됨.
}
@RequestBody
request문자열이 그대로 파라미터로 전달됩니다.
즉, URI 경로에서 원하는 데이터를 추출합니다.
@ModelAttribute와 유사하지만 JSON 데이터를 객체로 변환해주는 용도입니다.
'DEV&OPS > Java' 카테고리의 다른 글
Spring MVC maven jdk11 tomcat9 mysql5 mybatis3 설정 (0) | 2023.01.17 |
---|---|
Spring AOP (0) | 2023.01.16 |
Spring 의존성 주입과 제어의 역전 (0) | 2023.01.13 |
servelt / jsp 페이징 처리 공식 (0) | 2023.01.13 |
Spring bean (0) | 2023.01.12 |