본문 바로가기

WEB/SPRING

토비2 1.2 ioc/di를 위한 빈 설정 메타정보 작성

 

XML, 애노테이션, 자바 코드로 작성된 빈 설정 정보가 전용 리더를 통해 읽혀져서 BeanDefinition 타입의 오브젝트로

변환된다.

그 정보를 IOC컨테이너가 활용한다.

 

빈 등록 방법

1.1 XML

<bean id="hello" class="packagePath.class"></bean>

 

 

1.2 XML:네임스페이스와 전용 태그

 

<bean id="mypointcut" class="org.springframework.aop.aspectj.AspectJExpressionPointcut">

<property name="expression" value="execution(* *..*ServiceImpl.upgrade*(..))" />

</bean>

 

이 코드는 개발자가 작성한 코드가 아니라 스프링이 제공해주는 코드를 class정보에 작성한다.

네임스페이스와 전용 태그를 사용하면 다음과 같이 줄일 수 있다.

 

 

<aop:pointcut id="mypointcut" expression="execution(* *..*ServiceImpl.upgrade*(..))" />

 

 

 

 

2. @Component 애노테이션

@Component
public class AnnotatedHello{
}

 

@Test
    public void 컴포넌트빈주입테스트(){
        ApplicationContext ctx =
                new AnnotationConfigApplicationContext(
                        "study.tobi.ioc.bean");

        AnnotatedHello hello = ctx.getBean("annotatedHello", AnnotatedHello.class);

        Assertions.assertThat(hello).isNotNull();
    }

 

 

3. @Configuration과 @Bean 애노테이션

@Configuration
public class AnnotatedHelloConfig {

    @Bean
    public AnnotatedHello AnnotatedHello(){
        return new AnnotatedHello();
    }
}

 

 @Test
    public void 자바코드빈주입테스트(){

        ApplicationContext ctx = new AnnotationConfigApplicationContext(AnnotatedHelloConfig.class);
        AnnotatedHello hello = ctx.getBean("AnnotatedHello", AnnotatedHello.class);

        AnnotatedHelloConfig config = ctx.getBean("annotatedHelloConfig", AnnotatedHelloConfig.class);
        Assertions.assertThat(config).isNotNull();
    }

 

 

메타정보 항목 추가

 

XML방식

<bean id="dataSource" class="...">
	<property name=... value=...>
    <property name=... value=...>
    <property name=... value=...>
    <property name=... value=...>
</bean>

 

자바코드 (@Configuration)

@Configuration
public class ServiceConfig {

	@Bean
    public DataSource dataSource() {
        SimpleDriverDataSource dataSource = new SimpleDriverDataSource();

        dataSource.setDriverClass(org.mariadb.jdbc.Driver.class);
        dataSource.setUrl("jdbc:mariadb://localhost:3307/bootex");
        dataSource.setUsername("bootuser");
        dataSource.setPassword("bootuser");

        return dataSource;
    }
}