본문 바로가기

건승하고있어요/Spring framework

[Spring] 스프링1일차 - 의존성 주입 어노테이션

반응형

의존성 주입 어노테이션


 어노테이션 

 설명 

 @Autowired

 주로 변수 위에 설정하여 해당 타입의 객체를 찾아서 자동으로 할당한다.  

 @Qualifier

 특정 객체의 이름을 이용하여 의존성 주입할 때 사용한다. 

 @Inject

 @Autowired와 동일한 기능을 제공한다. 

 @Resource

 @Autowired와 @Qualifier의 기능을 결합한 어노테이션이다. 


@Autowired

-생성자나 메소드, 멤버변수 위에 모두 사용가능

-어디에 사용하든 결과는 같지만 대부분은 멤버변수 위에 선언하여 사용

@Autowired

private Speaker speaker;

-스프링 컨테이너는 멤버변수 위에 붙은 @Autowired를 확인하는 순간 해당 변수의 타입을 체크, 그 타입의 객체가 메모리에 존재하는지 확인한 후 객체를 변수에 주입


->만약 @Autowired가 붙은 객체가 메모리에 없다면!?

NoSuchBeanDefinitionException을 발생시킨다. 따라서 반드시 해당 객체가 메모리에 생성되도록 해야한다. 


@Qualifier

-의존성 주입 대상이 되는 타입의 객체가 두 개 이상일 때 오류 발생! => 컨테이너는 어떤 객체를 할당해야 할지 스스로 판단할 수 없어서 에러가 발생한다. 

-따라서 이런 문제를 해결하고자 할 때 @Autowired 아래에 사용한다.

-@Qualifier 어노테이션을 이용하면 의존성 주입될 객체의 아이디나 이름을 지정할 수 있다.

@Autowired

@Qualifier("apple") ->apple타입의 스피커 객체를 생성하라.

private Speaker speaker;


@Resource

-객체의 이름을 이용하여 의존성 주입을 처리한다.

-name속성을 사용할 수 있어서 스프링 컨테이너가 해당 이름으로 생성된 객체를 검색하여 의존성 주입을 처리한다.

@Resource(name="apple")

private Speaker speaker;


추가어노테이션

Controller: 사용자의 요청 제어 

ServiceImpl: 실질적인 비지니스 로직 처리

DAO: 데이터베이스 연동


-@Component만으로 클래스객체를 생성할 경우 어떤 클래스가 어떤 역할을 수행하는지 파악하기 어려움.

-이러한 클래스 분류를 위해서 @Component를 상속한 어노테이션을 추가로 제공


 @Service 

 비지니스 로직을 처리하는 Service클래스 

 @Repository 

 데이터베이스 연동을 처리하는 DAO 클래스

 @Controller

 사용자 요청을 제어하는 Controller 클래스


-@Controller : 해당 객체를 MVC 아키텍처에서 컨트롤러 객체로 인식하도록 함

-@Repository : DB연동 과정에서 발생하는 예외를 변환해주는 특별한 기능 추가



아 1일차 진짜 매우 많다. 죽을뻔했네 

반응형