Spring에서는 DI 방식으로 코드를 구성할 때, XML을 사용하는 방식과 Annotation 방식을 사용하는 방식이 존재한다.
Xml 방식은 Bean 등록과 의존성 주입을 모두 Xml 파일에 작성을 하는 형식이다.

그림과 같이 Bean에 모든 정보를 선언을 진행을 하는 것을 볼 수 있다.
<Bean>에 대한 속성을 보면 id는 현재 사용이 되고 있는 bean에 대한 선언이라고 보면 된다. 그리고 내부에 있는 constructor-arg는 생성자 인자를 리터럴로 전달하는 역할이다. property 는 Setter을 주입을 용도로 사용이 된다. ref은 다른 bean에 선언이 되어있는 xmlFixDiscountPolicy에 있는 discountPolicy를 setter로 사용을 한다고 보면 된다. property 이하에 있는 list는 컬렉션을 주입하는 거고, list 이하에 ref로 선언된 다른 bean을 갖고온다는 뜻이다.

Xml의 위치를 연결하여 Xml을 호출할 수 있는 객체를 생성을 한다. 그러면 getBean을 통해서 Xml에서 선언을 했던 Bean을 갖고와서 사용을 할 수 있다.

그 외 다른 기능들을 담당하는 코드들은 그냥 일반적으로 선언 및 메소드 작성을 진행하면 된다.

그림 자료로는 notify에 대한 코드를 올리지 않았지만, orderService에서 메소드를 실행 했을 때, 그림 4에서 메세지가 출력이 되는 코드가 추가 되어있다는 걸 알 수있다.
다음은 Annotation 방식이다.

따로 Xml 파일을 작성하지 않고, @을 앞에 놓고 선언을 하여 컨테이너가 대신 주입해주는 방식으로 구성이 되어있다. 설정 클래스를 나타내는 @Configuration을 통해 해당 클래스가 설정 클래스 임을 나타낸다. 그리고 내부에 Bean을 선언하여 timeProvider의 시간 형식을 지정해주는 역할을 진행한다

그리고 기능을 담당하는 역할( 일반 클래스)는 Component를 통해서 선언을 한다. 만약에 이 Component가 설정이 안되어있으면 다른 곳에서 호출을 해도, 그게 뭐야? 그런 컴포넌트는 존재하지 않아 하고 찾지를 못하니 선언을 제대로 해주도록 하는게 좋다.
.


다음은 @Profile이다. 이 프로파일 별로 Bean이 실행이 되는 환경이 달라지는 걸 설정을 할 수 있다.

Edit Configuration에서 VM option을 그림 8과 같이 작성을 한다면 local을 실행하면 SmsNotifier이 실행되고, prod를 실행하면 EmailNotifier이 실행이 된다.



다음은 비지니스 로직 클래스에서 사용이 되는 Service 영역이다. @Autowired를 통해서 생성자에 대한 의존성을 자동 주입해준다. 이는 OrderService 객체가 생성이 되자마자 바로 설정이 되는 것이다. @Qualifier는 Bean의 충돌 상황에 대비를 하여 어떤 Bean을 주입할지에 대해서 결정을 해주는 역할이다. 이와 비슷한 상황에서 해결을 할 수 있는 @Primary도 존재한다. 이는 비슷한 역할을 하는 코드에다가 어느 것이 우선적으로 실행이 될지를 결정해주는 역할을 한다.
'멀티캠퍼스' 카테고리의 다른 글
| 코드의 보안적 조치 (0) | 2025.09.29 |
|---|---|
| 백엔드 로그인 구현 (0) | 2025.09.22 |
| Servlet Assignment 코드 리뷰 (0) | 2025.09.08 |
| Servlet MVC 실습 코드 리뷰 (0) | 2025.09.01 |
| 서블릿 기초 (1) | 2025.08.25 |