기억의 DataBase

Java Config를 통한 IoC/DI 본문

Spring

Java Config를 통한 IoC/DI

Zester; 2019. 3. 21. 18:29
xml을 활용해서 객체를 관리하던 것을 
자바 config 파일(class 파일)Annotation(@)을 통해서 관리

※Annotation(@) 

JDK 5부터 사용 가능하며, Object에 특별한 의미를 부여하여,
컴파일이나 런타임시에 그 의미에 맞게 해석되도록 함


class 파일 위에 config 파일(설정 파일)임을 알려주는 @Configuration 어노테이션을 작성

  


Bean을 등록하는 방법은 메소드를 만드는 방식으로 하여, xml 사용에 비해 친숙

AnnotationConfigApplicationContext는 @Bean이 붙어있는 메소드를 자동으로 실행하여 
Return되는 객체들을 싱글톤으로 관리

new AnnotationConfigApplicationContext(Applicatio.class)는 Bean을 활용하여 객체를 만드는 공장

(Car)ac.getBean("car")로 불러오는 Bean을 지정할 수 도 있으나

Car.class와 같이 클래스 타입으로 불러오면 2가지 장점이 있으므로 지향

  1.  메소드명 오타 신경쓸 필요가 없음
  1.  형변환을 할 필요가 없음

ApplicationContext는 파라미터가 없는 @Bean 생성메소드를 먼저 다 생성하고 객체들을 관리(IoC)

이후 파라미터에, 생성된 객체들과 같은 타입이 있는 객체가 있는 경우 파라미터로 전달해서 객체를 생성(DI)


@ComponentScan을 통해서 지정한 패키지 내의 @이 붙은 것들을 Memory에 올리고 DI를 함

 

@ComponentScan을 통해서 관리될 수있도록, class위에 @Component를 적어줌
(@Component, @Controller, @Service, @Repository 등이 가능)

※그러면 다 Component를 적어주면 되지 왜 @Bean을 사용하는가?

JDBC나 외부 라이브러리의 경우 Class안에 어노테이션을 줄 수 없기 때문에 @Bean으로 관리



Engine이라는 Type의 @Component가 있는 경우, Container가 자동으로 객체로 생성하고
@Autowired가 있는 객체(v8)에 주입하여 주기 때문에 별도의 setter가 필요하지 않음

'Spring' 카테고리의 다른 글

Spring MVC  (0) 2019.03.25
Spring JDBC  (0) 2019.03.22
xml을 통한 IoC/DI  (0) 2019.03.21
IoC와 DI  (0) 2019.03.21
Spring Framework  (0) 2019.03.21
Comments