기본적으로 사용 방식은 거의 비슷하지만, 엄밀한 차이는 다음과 같다.


@Autowired

- 비표준 / Spring Framework용

- Bean 검색 우선 순위 : Type 우선

- @Qualifier("") 사용하여 지정 가능

-> ex)

@Autowired

@Qualifier("test1")


@Resource

- Java 표준

- Bean 검색 우선 순위 : ID 우선

- Name 속성으로 지정 가능

-> ex)

@Resource(name="test1")

저작자 표시
신고

참고 : http://noritersand.tistory.com/156



Bean : Spring Container에서 관리되는 객체 (기본적으로 Singleton)


- @Configuration Annotation으로 Bean 등록

-> @Configuration이 작동되기 위해서는 cglib를 pom.xml 파일에 dependency로 등록해 주어야 한다.

-> @Configuration으로 정의하게 되면 Spring에서 Bean 설정을 위한 객체 인식하게 되고, 그 내부에 @Bean으로 Bean 객체를 정의한다.

-> Method를 @Bean으로 정의하는데, 바로 이 @Bean으로 정의된 메소드가 반환하는 객체가 바로 Bean 객체이다. Spring Container에 딱 한 번 등록되어 사용하게 된다. 즉, Singleton으로 관리된다.

-> node.js의 module.export로 정의한 코드 파일을 require나 import로 등록하는 것과 비슷한 동작이라고 생각할 수 있다.


다음 4가지의 Annotation으로 Bean 형식을 설정한다.

- @Component

-> @ComponentScan을 사용하여 package를 지정해 주면 그 하위에 존재하는 @Component로 정의된 클래스들을 검색하여 Bean으로 등록시킨다.

-> 검색되어 Bean으로 등록될 때, class 이름의 첫 글자가 소문자로 변경되어 등록된다.


다음 3가지 Annotation은 더 세부적인 관리를 위해 약간의 기능을 추가하여 @Component를 확장한 것들이다.


- @Controller

-> 당연한 말이겠지만.. MVC 에서 Controller 담당이라고 정의하기 위한 것.

-> Data를 가공하여 여러 방식으로 제공해 주기 위한 객체임을 정의

-> @RequestMapping 등을 통해 경로 설정이나.. 여러가지 것들 가능


- @Repository

-> DB Exception Translation을 해 줌

-> DAO에 적용


- @Service 

-> 비즈니스 로직을 구현하는 Component로 지정

-> 아직 자세힌 모르겠다. 나중에 쓰게 되면 포스팅해야겠다.


저작자 표시
신고

참고 : http://sailboat-d.tistory.com/33




Spring boot에서는 web.xml을 사용하지 않는다. 그래서 Servlet이나 Filter를 org.springframework.boot.web.servlet 의 RegistrationBean 을 통해 등록해야 한다. 하지만 Servlet 등록은 특별한 경우가 아니면 추천하지 않는 방식이라고 한다. 특별한 경우라는 것은 아직 잘 모르겠으나, 사용하지 않는 것이 spring boot 개발 방식에 적합하다는 것일까?


Bean Configuration

Bean 등록에 대한 설정 방법은 다음과 같은 3가지가 있는데, Spring boot에서는 Annotation만 사용하는 방식을 사용하도록 권장하는 것 같다.


- XML만 사용한 방식 

- 컨테이너가 관리하고 있는 Servlet / Bean을 한 눈에 파악할 수 있다.

- 코드량이 많고 버그 발생률이 높다.

- Annotation만 사용한 방식

- 코드량이 적고 버그 발생률이 적다.


- 둘 다 쓰는 방식

- DB / 등의 기본 Base에 해당하는 설정은 XML에 정의

- 나머지는 Annotation으로 정의

- 장단점이 적당히 스며들게 된다.



저작자 표시
신고