학습하며 정리한 내용을 올리는 것이니, 참고용으로만 봐 주시길 바랍니다.
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌

스프링 설정파일(/src/main/resources/applicationContext.xml) 분리

  1. .

     String[] appCtxs = {"classpath:appCtx1.xml", "classpath:appCtx2.xml", "classpath:appCtx3.xml"};
     GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(appCtxs);
  2. 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 />를 기입해 주어야 한다.

  1. @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"
  2. @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

+ Recent posts