이번 시간에는 어노테이션을 이용해서 객체를 생성하는 방법에 대해 알아보고자 한다.
우선 xml 파일에 있는 다음의 코드를 주석처리 해주었다.
<!-- ExamConsole console = new InlineExamConsole(); -->
<bean id="console" class="spring.di.ui.InlineExamConsole">
<!-- console.setExam(exam); -->
<!-- <property name="exam" ref="exam"/> -->
</bean>
이렇게 하면 xml 파일에서 객체를 생성하는 코드는 모두 사라졌을 것이다.
이후 객체를 생성할 클래스로 들어가 해당 클래스 위에 @Component 어노테이션을 작성해준다. 다음으로 이전 시간에 우리가 스프링에게 지시했던 것처럼 xml 파일에 코드를 작성해준다.
<context:component-scan base-package="spring.di.ui" />
이렇게 하면 <context:annotation-config /> 구문은 더 이상 필요가 없기 때문에 삭제해준다.
이제 java 파일에서 생성된 객체를 받아오는 코드를 작성하고 실행하면 정상적으로 실행 되는 것을 확인할 수 있다.
ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
ExamConsole console = context.getBean(ExamConsole.class);
console.print();
다만 여기서 위와 같은 방식으로 하지 않고 이름으로 객체를 받아오려 할 경우 오류가 발생한다.
ApplicationContext context = new ClassPathXmlApplicationContext("spring/di/setting.xml");
ExamConsole console = (ExamConsole) context.getBean("console");
console.print();
이럴 경우 @Component 어노테이션에 다음과 같은 설정을 추가해줄 수 있다.
@Component("console")
이후 실행해보면 정상적으로 작동하는 것을 확인할 수 있다.
하지만 실행 결과를 보면 아직 Autowired가 되지 않은 것을 알 수 있다. 따라서 Exam 객체도 따로 만들어 주어야 한다.
우선 위에서 작성했던 xml 코드를 다음과 같이 수정해준다.
<context:component-scan base-package="spring.di.ui, spring.di.entity" />
즉, 두 클래스의 패키지 경로가 서로 다르기 때문에 확인해야하는 패키지 경로를 추가해준 것이다.
이제 클래스로 이동하여 @Component 어노테이션을 달아주면 된다.
이제 객체 안에 있는 속성의 기본 값들을 설정하기 위한 작업을 수행해보자. 이때 사용하는 어노테이션은 @Value이다.
@Value("20")
private int kor;
@Value("30")
private int eng;
이후 실행해보면 결과가 잘 출력되는 것을 확인할 수 있다.
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 7. 순수 자바로 AOP 구현해보기 (0) | 2022.04.17 |
---|---|
[Java / Spring] 6. XML Configuration을 Java Configuration으로 변경하기 (0) | 2022.04.11 |
[Java / Spring] 4. 어노테이션을 이용할 때의 장점과 @Autowired를 이용한 DI 해보기 (0) | 2022.04.11 |
[Java / Spring] 3. 콜렉션 생성과 목록 DI (0) | 2022.04.11 |
[Java / Spring] 2. DI 값 설정 (0) | 2022.04.11 |