AnnotationBean.java

AnnotationBeanApp

04-3_beanAnnotation.xml


ComponentAnnotationBean.java

ComponentAnnotationBeanApp.java

04-3_beanAnnotation.xml


위에 보면 @Componebt 어노테이션을 쓴 것을 볼 수 있다. 해당 어노테이션을 사용하기 전에 xml(Spring Container) 환경설정파일에 설정을 해줘야한다.
<context:component-scan base-package="xyz.itwill04.bean"/>
component-scan 이란?
스프링 컨테이너가 클래스에서 사용된 스프링 어노테이션을 검색해 처리할 수 있도록 설정하는 엘리먼트이다.
<context:component-scan>: XML 설정 파일에서 이 설정은 지정된 패키지를 스캔하여 @Component, @Service, @Repository, @Controller와 같은 어노테이션이 붙은 클래스를 자동으로 Bean으로 등록한다.클래스를 스프링 컨테이너가 관리하는 Spring Bean으로 등록하기 위한 어노테이션이다.
클래스의 이름을 식별자(beanName)로 사용하고, 첫번째 문자는 소문자로 변환되어 사용한다.
componentAnnotationBean 첫 번째 문자만 소문자로 인식한다.@Component 어노테이션의 value 속성을 사용하여 식별자 변경 가능하다.
bean 으로 설정된다.코드의 간결성과 가독성 향상
어노테이션 사용: 클래스 위에 직접 어노테이션을 추가함으로써, 해당 클래스가 어떤 역할을 하는지 즉시 알 수 있습니다. 예를 들어, @Component나 @Service와 같은 어노테이션을 보면 해당 클래스가 Spring Bean으로 사용된다는 것을 바로 알 수 있습니다.
XML 설정 사용: XML 파일을 열어 설정을 확인해야 하며, 설정과 코드가 분리되어 있어 가독성이 떨어질 수 있습니다.
@Component
public class MyComponent { }
<bean class="com.example.MyComponent" id="myComponent"/>
설정과 코드의 일관성
어노테이션 사용: 설정과 코드가 같은 파일에 존재하므로, 변경 사항을 쉽게 추적하고 수정할 수 있습니다. 개발자가 코드를 작성하면서 설정까지 동시에 처리할 수 있어 실수를 줄이고 일관성을 유지할 수 있습니다.
XML 설정 사용: 설정 파일과 코드가 분리되어 있어 코드 변경 시 설정 파일을 함께 수정해야 하며, 이로 인해 불일치가 발생할 수 있습니다.
유지보수와 관리가 용이함
어노테이션 사용: 코드와 설정이 한 곳에 있기 때문에 유지보수가 쉬워지고, 코드의 변화에 따른 설정 변경이 자동으로 관리됩니다.
XML 설정 사용: XML 설정 파일이 많아지면 관리가 어려워지고, 어떤 설정이 어떤 클래스에 대응되는지 찾기가 번거로울 수 있습니다.
자동 스캔을 통한 Bean 등록
component-scan과 @Component 사용: @ComponentScan이나 <context:component-scan>을 설정하면 해당 패키지 내 모든 @Component, @Service, @Repository 등의 어노테이션이 붙은 클래스가 자동으로 Bean으로 등록됩니다.
XML 설정 사용: 모든 Bean을 하나하나 엘리먼트로 등록해야 합니다. 클래스가 추가될 때마다 새로운 설정을 추가해야 하며, 실수로 빠뜨리기 쉽습니다.
<!-- XML 설정을 통한 Bean 등록 -->
<context:component-scan base-package="com.example"/>
// @Component 어노테이션 사용
@Component
public class MyComponent { }
자동 의존성 주입의 간편함
어노테이션 사용: @Autowired, @Inject, @Qualifier 등을 사용하여 자동으로 의존성을 주입할 수 있습니다. 의존성 주입 설정이 코드에 직접 포함되어 있어 변경 사항을 쉽게 적용할 수 있습니다.
XML 설정 사용: 의존성을 주입하려면 <property> 태그를 사용해야 하며, XML 파일을 수정해야 합니다. 이는 유지보수 시 번거로움을 야기합니다.
// @Autowired를 사용한 의존성 주입
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
}
<!-- XML을 사용한 의존성 주입 -->
<bean class="com.example.MyService" id="myService">
<property name="myRepository" ref="myRepository"/>
</bean>
어노테이션 기반 설정의 유연성
명확한 역할 구분과 관리
@Service, @Repository, @Controller 등의 어노테이션을 통해 각 클래스의 역할을 즉시 파악할 수 있어, 협업 시에도 코드의 이해도가 높아집니다.