본문 바로가기

WEB/SPRING

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

 

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

변환된다.

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

 

빈 등록 방법

1.1 XML

java
닫기
<bean id="hello" class="packagePath.class"></bean>

 

 

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

 

java
닫기
<bean id="mypointcut" class="org.springframework.aop.aspectj.AspectJExpressionPointcut"> <property name="expression" value="execution(* *..*ServiceImpl.upgrade*(..))" /> </bean>

 

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

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

 

 

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

 

 

 

 

2. @Component 애노테이션

java
닫기
@Component public class AnnotatedHello{ }

 

java
닫기
@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 애노테이션

java
닫기
@Configuration public class AnnotatedHelloConfig { ​​​​@Bean ​​​​public AnnotatedHello AnnotatedHello(){ ​​​​​​​​return new AnnotatedHello(); ​​​​} }

 

java
닫기
@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방식

java
닫기
<bean id="dataSource" class="..."> ‌<property name=... value=...> ​​​​<property name=... value=...> ​​​​<property name=... value=...> ​​​​<property name=... value=...> </bean>

 

자바코드 (@Configuration)

java
닫기
@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; ​​​​} }