앞 포스팅에서 Exam에 Component 어노테이션을 붙여 Bean객체로 등록했다. 하지만 이는 MVC패턴에 맞지 않는 생성 방식이다.
@Component와 같은 역할을 하는 어노테이션에는 @Service, @Controller, @Repository가 있다.
이들은 각각 해당 클래스를 Bean객체로 등록하여 ioc컨테이너에 넣어주는 같은 역할을 하지만, 각 계층별 다른 이름을 사용하여 해당 클래스가 어떤 역할, 계층인지를 보다 쉽게 알 수 있데 한다.
때문에 Exam은 서비스, 컨트롤러, 레퍼지토리에 해당하지 않는 엔티티이기 때문에 @Component를 사용하는 것은 적절치 않다.
또한 이와 더불어 아직 setting.xml을 사용하여 스프링의 컨피규레이션을 정의하고 있는데 이를 자바 클래스로 대체하는 것을 보겠다.
오른쪽이 왼쪽의 xml파일을 클래스로 대체한 것이다. (p:kor부분은 무시)
Diconfig클래스에
@Configuration을 붙여 해당 클래스가 컨피규레이션임을 알리고.
10라인의 @ComponentScan("spring.di.ui")은 왼쪽 xml파일의 12라인과 같은 의미이다.
그리고 14라인의 @Bean은 우리가 직접 생성한 객체를 IOC컨테이너에 넣어준다. 이부분이 entity를 컴포넌트 없이 만들어 컨테이너에 넣는 부분이다.
즉 14라인~17라인은 Exam exam = new NewlecExam();으로 생성된 객체를 ioc컨테이너에 담는 것이다.
이제 이렇게 바꾸었으니 프로그램의 실행부도 바뀌어야한다.
13라인이 바뀌었다.
ApplicationContext에는
ClassPathxmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext, AnnotationConfigApplicationContext
등이 있는데 아래의 AnnotationConfigApplicationContext가 어노테이션을 사용한 config를 할때 쓴다.
그리고 인자로 간단히 클래스명.class를 넣어주면 된다.
'java spring > DI' 카테고리의 다른 글
DI- 3 어노테이션 기반으로 의존성 주입하기 (0) | 2021.04.28 |
---|---|
DI - 2 (0) | 2021.04.26 |
DI -1 (0) | 2021.04.26 |