학습하며 정리한 내용을 올리는 것이니, 참고용으로만 봐 주시길 바랍니다.
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
스프링 설정파일(/src/main/resources/applicationContext.xml
) 분리
.
String[] appCtxs = {"classpath:appCtx1.xml", "classpath:appCtx2.xml", "classpath:appCtx3.xml"}; GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(appCtxs);
appCtxImport.xml 중
<import resource="classpath:appCtx2.xml"/> <import resource="classpath:appCtx3.xml"/>
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:appCtxImport.xml");
Bean의 범위
: Bean은 기본적으로 Singleton의 개념이다.
: getBean("A") 를 하면 Spring Container에 생성되어있는 A 객체를 참조하는 값을 가지고 올 뿐 객체를 새롭게 생성하는 것은 아니다.
: Singleton 과 반대대는 Prototype의 개념도 있는데, 이 방식을 적용하기 위해서는<bean id="~" class="" scope="prototype"> </bean>
을 해 주어야한다. (흔치 않음)
의존객체 자동주입
: 기존에는 <constructor-arg>
, <property>
태그를 이용해 의존객체를 명시하였다.
: @Autowired
, @Resource
어노테이션을 이용해 스프링 컨테이너가 자동으로 필요한 의존대상 객체를 찾아 의존 대상 객체가 필요한 객체에 주입해준다.
: 스프링 컨테이너 설정파일에 <context:annotation-config />
를 기입해 주어야 한다.
@Autowired
- 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입
- 생성자, property(member), method에 쓸 수 있음
- @Autowired 구문을 보면, 해당 구문에 필요한 객체의 데이터 타입을 갖고있는 빈 객체를 찾아 넣어준다.
@Autowired public void wordConstructor(WordDao wordDao) {}
>**WordDao** wordDao
<bean id = "wordDao" class="com.word.dao.WordDao" />
>class="com.word.dao.WordDao"
@Resource
- 주입하려고 하는 객체의 이름이 일치하는 객체를 자동으로 주입
- property(member), method에만 쓸 수 있음
- 이름:
private WordDao wordDao;
에서 변수명(wordDao) @Autowired public void wordConstructor(WordDao wordDao) {}
>WordDao **wordDao**
<bean id = "wordDao" class="com.word.dao.WordDao" />
>id = "wordDao"
의존객체 선택
: 동일한 객체가 2개 이상인 경우 스프링 컨테이너는 자동 주입 대상 객체를 판단하지 못해 Exception을 발생시킴
<bean id="wordDao" class="com.word.dao.WordDao">
<qualifier value="useDao" />
</bean>
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
...
@Autowired
@Qualifier("useDao")
private WordDao wordDao;
: 위 처럼 @Qualifier
어노테이션을 사용하면 해결이 된다.
- bean 객체에 태그에 value를 할당해 주면, @Qualifier를 만났을 때 해당 value에 매칭되는 bean 객체를 넣어준다.
: 단, bean 객체의 id와 객체의 이름(변수명)이 일치할 경우 @Qualifier를 쓰지 않아도 되긴한다. 하지만 혼동을 줄 수 있으니 @Qualifier를 쓰도록하자.
의존객체 자동주입 체크
@Autowired(required = false)
private WordDao wordDao;
: 의존객체가 존재하면 주입하고, 없으면 주입하지마!
: required = false를 이용하면, 스프링컨테이너에서 bean 객체를 만들지 않았을 때 Exception이 발생하는 상황을 제거해 줄 수 있음
: 선호되는 방식은 아님
@Inject
: @Autowired와 동일한 기능을 제공하는 것으로, 의존 객체를 자동으로 주입할 수 있다.
: 차이점은, required 속성을 제공하지 않는다.
: 차이점은, @Qualifier 대신 @Named를 쓰며, 스프링컨테이너에서 qualifier 태그를 쓸 필요 없다.
: Autowired가 일반적으로 더 많이 쓰인다.
<bean id="wordDao1" class="com.word.dao.WordDao" />
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
@Inject
@Named(value="wordDao1")
private WordDao wordDao;
'Backend > Spring' 카테고리의 다른 글
Spring - 데이터베이스 (0) | 2021.02.14 |
---|---|
Spring - 세션과 쿠키 && 리다이렉트와 인터셉트 (0) | 2021.02.09 |
Spring - MVC (0) | 2021.02.04 |
Spring - 스프링 컨테이너의 생성관련 (0) | 2021.02.02 |
Spring - Dependency Injection (0) | 2021.01.31 |