Whiteship's Note

[스프링 퀴즈] @Autowired

Spring/etc : 2010.06.04 17:30


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class AutowiredTest {

    @Autowired DataSource dataSource;

    @Test
    public void notNull(){
        assertThat(dataSource, is(notNullValue()));
    }

}

위와 같은 테스트가 있다. 위 코드가 있는 곳과 같은 패키지에 AutowiredTest-context.xml 이라는 빈 설정 파일을 만들었다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource"/>

</beans>

1. 이렇게 설정했을 때 테스트는 어떻게 될까? 깨질까? 성공할까?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource"/>

    <bean class="org.springframework.jdbc.datasource.SimpleDriverDataSource"/>

</beans>

2. 이렇게 설정했다면 어떻게 될까?

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"/>

    <bean id="testDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"/>

</beans>

3. 그럼 이건 어떨까?

셋다 맞춘 분에게 물어보고 싶은 질문이 있는데;; 맞추시는 분께 댓글로 질문 드리겠습니다.
top

  1. Favicon of http://lckymn.com BlogIcon Kevin 2010.06.04 19:41 PERM. MOD/DEL REPLY

    저렇게 해본적이 없어서 확실치는 않지만,
    설정파일이나 설정파일 위치에 문제가 없다는 가정하에
    ("설정파일 위치가 제대로 설정 안돼서 모두 실패" 혹은
    "설정파일의 설정이 잘못돼서 모두 실패" 이런거는 아니라고 가정... ㅡ_ㅡ;
    이거 잘 기억이 안 나거든요. ^^; )
    1. 알아서 타입추론해서 주입돼서 성공
    2. 주입하려는 타입의 instance가 하나 이상 존재해서 테스트 하기 전에 DI하면서 에러
    3. id가 dataSource인 instance가 주입돼서 성공

    SimpleDriverDataSource가 DataSource implementing 하는거 맞죠? :)
    그나저나 혹시 만에 하나 맞더라도 질문은 다음분께 양보하는 미덕을 발휘해 봅니다. :D

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.04 21:13 PERM MOD/DEL

    Kevin님께서 푸시면 어떡합니다~~ㅋㅋ

    원래 드리려고 했던 질문은 왜 id로 먼저 확인안하고 타입으로 먼저 찾아볼까요? 라는 거였는데 집에 오는길에 생각하다가 풀렸습니다.

    id 먼저 확인했다가 그 빈이 원하는 타입이 아니면 또 다시 원하는 타입에 해당하는걸로 찾아봐야 할테니 그냥 애초에 타입으로 먼저 찾는게 id로 먼저 찾아보는 것보다 나은 것 같더라구요.

    Favicon of http://lckymn.com BlogIcon Kevin 2010.06.05 18:38 PERM MOD/DEL

    헉! 제가 풀면 안되는거였나요? @_@; 다음 질문이라도 양보해서 다행... (응?ㅡ_ㅡ?)
    그나저나 맞기는 한건지...ㅡ_ㅡ;
    요즘은 @Configuration 위주로 써서요.
    xml은 security 쪽이랑, db 관련된 쪽만 쓰는데,
    여기서 같은 타입의 객체를 두개이상 만들일이 없어서
    가물가물합니다. :)
    (View도 다 @Configuration 에서 만들어 버립니다. :) )
    아... component scanning 도 xml 쓰는군요.

    @Configuration 에서 같은 타입의 객체를 두개이상
    생성 해야 할경우, 따로 설정하기 보다
    method 이름을 다르게 하고,
    그게 맞게 변수이름을 사용해서 처리하는식으로 써서요.

    Favicon of http://whiteship.me BlogIcon 기선 2010.06.06 22:14 PERM MOD/DEL

    벌써 @Configuration을 애용하고 계시군요.

    얼마전에 트위터인지 버즈에서 링크건 내용 중에 그런게 있더라구요. '사람들은 편한것 보다 익숙한 것을 사용한다.' 였나? 머 그런 비슷한 거였는데.. 그 글을 보면서 공감가는 부분이 많았는데

    @Configruation에 대한 댓글을 보다보니 갑자기 그 글귀가 생각나네요.ㅎ

    사실 저도 같은 타입 빈을 두개씩 등록해서 사용하는 경우는 거의 드물구요. 위 테스트는 @Autoewired 학습 테스트 정도에 해당하겠네요.

    @Autowired가 "타입으로 자동주입" 이라는 생각으로 굳어져있었거든요. 그래서 내심 세번째 경우도 에러가 나지 않을까하고 확인해본것인데 잘 되더라구요.ㅋㅋ

Write a comment.




: 1 : 2 : 3 : 4 : 5 : ··· : 26 :