[Spring 3.1] 자바 설정 예제
먼저, XML 설정부터 볼까나..
<bean id="userDao" class="chapter06.exercise.aop12.UserDaoJdbc">
<property name="dataSource" ref="dataSource" />
</bean><tx:annotation-driven />
<bean id="userService" class="chapter06.exercise.aop12.UserServiceImpl">
<property name="userDao" ref="userDao" />
<property name="mailSender" ref="mailSender" />
</bean><bean id="testUserService"
class="chapter06.exercise.aop12.UserServiceTest$TestUserServiceImpl"
parent="userService" /><bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean><jdbc:embedded-database type="HSQL" id="dataSource">
<jdbc:script location="member_table_1.sql" />
</jdbc:embedded-database><bean id="mailSender" class="chapter06.exercise.aop12.DummyMailSender" />
이 설정은 내가 강의할 때 사용하는 예제 코드에 들어있는 코드로, 토스3에 있는 코드를 기반으로 작성한 샘플 코드다. jdbc:embedded를 사용하는 등, 실습하기 손쉽게 조금 고친 부분이 있다.
이 설정을 스프링 3.1 자바 설정으로 다음과 같이 변경할 수 있다.
@Configuration
@EnableTransactionManagement
public class TestDaoConfg {
@Bean
public UserDao userDao(DataSource dataSource) {
UserDaoJdbc userDaoJdbc = new UserDaoJdbc();
userDaoJdbc.setDataSource(dataSource);
return userDaoJdbc;
}
@Bean
public UserService userService(UserDao userDao, MailSender mailSender){
UserServiceImpl userServiceImpl = new UserServiceImpl();
userServiceImpl.setUserDao(userDao);
userServiceImpl.setMailSender(mailSender);
return userServiceImpl;
}
@Bean
public UserService testUserService(UserDao userDao, MailSender mailSender){
TestUserServiceImpl userServiceImpl = new TestUserServiceImpl();
userServiceImpl.setUserDao(userDao);
userServiceImpl.setMailSender(mailSender);
return userServiceImpl;
}
@Bean
public MailSender mailSender(){
return new DummyMailSender();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(destroyMethod="shutdown")
public DataSource dataSource(){
EmbeddedDatabaseFactory factory = new EmbeddedDatabaseFactory();
factory.setDatabaseName("sample");
factory.setDatabaseType(EmbeddedDatabaseType.HSQL);
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.addScript(new ClassPathResource("member_table_1.sql"));
factory.setDatabasePopulator(populator);
return factory.getDatabase();
}
}
뭐 대부분은 문제가 아닌데… jdbc 네임스페이스를 대체하는 코드는 도무지 외울 수가 없다.. XML이 더 편하게 느껴진다. 잘못해서 destroyMethod라도 설정하지 않으면 어쩔것인가…
@EnableXxx과 TestContext 연동으로 XML에서 자바 설정으로 넘어가지 위해 열심히 코딩해준 건 고맙지만.. 아직 2% 부족하게 느껴진다.