Recent Posts
Recent Comments
Link
11-23 13:47
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

Spring 어노테이션 본문

DEV&OPS/Java

Spring 어노테이션

ALEPH.GEM 2023. 1. 13. 22:29

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 데이터를 객체로 변환해주는 용도입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

'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