소소한개발팁
반응형

XML 단독 사용

*모든 Bean을 명시적으로 XML에 등록하는 방법이다.

 

*생성되는 모든 Bean을 XML에서 확인할 수 있다는 장점이 있으나

Bean의 개수가 많아지면 XML 파일을 관리하기 번거로울 수 있다.

 

*여러 개발자가 같은 설정파일을 공유해서 개발하다 보면 설정파일을 

동시에 수정하거나 충돌이 일어나는 경우도 적지 않다.

 

*DI에 필요한 적절한 setter 메서드 또는 constructor 가 코드 내에 반드시 존재해야 한다.

 

*개발 중에는 어노테이션 설정방법을 사용했지만, 운영 중에는 관리의 편의성을 위해 XML 설정으로 변경하는 전략을 쓸 수 도 있다.

XML과 빈 스캐닝 의 혼용

*Bean으로 사용될 클래스에 특별한 어노테이션을 부여해주면 이런 클래스를 자동으로 찾아서 Bean으로 등록한다.

 

*특정 어노테이션이 붙은 클래스를 자동으로 찾아서 Bean으로 등록해주는 방식을 빈 스캐닝(Bean Scanning)을 통한 자동인식 Bean 등록기능 이라고 한다.

 

*어노테이션을 부여하고 자동 스캔으로 빈을 등록하면 XML 문서 생성과 관리에 따른 수고를 덜어주고 개발 속도를 향상시킬 수 있다.

 

*애플리케이션에 등록될 Bean이 어떤 것들이 있고 , Bean들 간의 의존관계가 어떻게 되는지를 한눈에 파악할 수 없다는 단점이 있다.

 

Bean 등록 Annotation

@Component  : 컴포넌트를 나타내는 일반적인 스테레오 타입으로 <bean> 태그와 동일한 역할을 함

@Repository : 퍼시스턴스 (persistence) 레이어, 영속성을 가지는 속성(파일,데이터베이스)을 가진 클래스

@Service :  서비스 레이어, 비즈니스 로직을 가진 클래스

@Controller : 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는클래스

 

*@Repository,@Service,@Controller 는 더 특정한 유즈케이스에 대한 @Component의 구체화된 형태이다.

 

Bean 의존관계 주입 Annotation

@Autowired, @Resourcce 어노테이션은 의존하는 객체를 자동으로 주입해 주는 어노테이션이다.

@Autowired 는 타입으로 ,@Resource 는 이름으로 연결한다는 점이 다르다.

 

@Aurowired

*정밀한 의존관계 주입(Dependency Injection)이 필요한 경우에 유용하다.

*@Autowired는 프로퍼티,setter 메서드, 생성자, 일반메서드에 적용 가능하다.

*의존하는 객체를 주입할 때 주로 Type을 이용하게 된다..

*@Autowirde는 <property>,<constructor-arg> 태그와 동일한 역할을 한다.

 

@Resource

*어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용된다.

*@Resource는 프로퍼티, setter 메서드에 적용 가능하다.

*의존하는 객체를 주입할 때 주로 Name을 이용하게 된다.

 

@Value 

*단순한 값을 주입할 때 사용되는 어노테이션이다.

*@Value("Spring")은 <property.. value="Spring" /> 와 동일한 역할을 한다.

 

@Qualifier

*@Qualifier는 @Autowired 어노테이션과 같이 사용되어 진다.

*@Autowired는 타입으로 찾아서 주입하므로, 동일한 타입의 Bean 객체가 여러 개 존재할 때 특정 Bean을 찾기 위해서는 @Qualifer를 같이 사용해야 한다.

 

Component Scan을 지원하는 태그

<context:component-scan>태그

 

*@Component 를 통해 자동으로 Bean을 등록하고, @Autowired로 의존관계를 주입받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 scan하기 위한 설정을 XML에 해주어야 한다.

 

<context:component-scan base-package="myspring.di.annot" />

 

*<context:include-filter>태그와 <context:exclude-filter>태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 수 있다.

 

 

반응형

'프레임워크 > Spring' 카테고리의 다른 글

AOP(Aspect Oriented Progamming)  (0) 2020.01.11
사용자관리 프로젝트  (0) 2020.01.08
Bean 의존관계 설정  (0) 2020.01.07
EL 과 JSTL  (0) 2020.01.06
Spring MVC  (0) 2020.01.06
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!