이전에는 XML코드로 빈들을 관리했다. 이제는 스프링 3.1을 이용하여 자바코드로 빈들을 관리하려고 한다.
applicationContext.xml
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="jdbc:mariadb://localhost:3307/bootex"/>
<property name="username" value="bootuser"/>
<property name="password" value="bootuser"/>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- application components -->
<!-- sql service -->
<bean id="sqlRegistry"
class="spring.sql.updatable.EmbeddedDbSqlRegistry">
<property name="dataSource" ref="embeddedDatabase"></property>
</bean>
<bean id="sqlService" class="spring.sql.OxmSqlService">
<property name="unmarshaller" ref="unmarshaller"/>
<property name="sqlRegistry" ref="sqlRegistry" />
</bean>
<jdbc:embedded-database id="embeddedDatabase" type="HSQL">
<jdbc:script location="sqlRegistrySchema.sql"/>
</jdbc:embedded-database>
<bean id="unmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="/jaxb"/>
</bean>
<tx:annotation-driven />
<bean id="userDao" class="spring.dao.UserDaoJdbc">
<property name="dataSource" ref="dataSource"/>
<property name="sqlService" ref="sqlService"/>
</bean>
<bean id="userService" class="spring.service.UserServiceImpl">
<property name="userDao" ref="userDao" />
</bean>
<bean id="testUserService" class="spring.service.UserServiceTest$TestUserService" parent="userService" />
</beans>
@Configuration
빈들을 등록하기 위한 클래스라는 것을 알리는 애노테이션이다. @Configuration이 붙은 클래스 자체도 빈으로 등록된다.
@Import
빈 설정을 위한 @Configuration클래스를 포함하기 위해서 사용한다.
@PropertySource
database.properties 파일의 property정보를 가져온다.
@Value 애노테이션을 이용해서 변수에 넣어주고 db에 적용하기 위해서 사용한다.
AppContext
@Configuration
@EnableTransactionManagement
@Import({SqlServiceContext.class })
@EnableSqlService
@PropertySource("/database.properties")
public class AppContext implements SqlMapConfig{
/**
* DB연결과 트랜잭션
*/
@Autowired
Environment env;
@Value("${db.driverClass}") Class<? extends Driver> driverClass;
@Value("${db.url}") String url;
@Value("${db.username}") String username;
@Value("${db.password}") String password;
@Override
public Resource getSqlMapResource()
{
return new ClassPathResource("sqlmap.xml", UserDao.class);
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer()
{
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public DataSource dataSource()
{
SimpleDriverDataSource ds = new SimpleDriverDataSource();
ds.setDriverClass(this.driverClass);
ds.setUrl(this.url);
ds.setUsername(this.username);
ds.setPassword(this.password);
return ds;
}
@Bean
public PlatformTransactionManager transactionManager() {
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource((javax.sql.DataSource) dataSource());
return tm;
}
/**
* 애플리케이션 로직 & 테스트용 빈
*/
@Autowired
SqlService sqlService;
@Bean
public UserDao userDao() {
UserDaoJdbc dao = new UserDaoJdbc();
dao.setDataSource((javax.sql.DataSource) dataSource());
dao.setSqlService(this.sqlService);
return dao;
}
@Bean
public UserService userService() {
UserServiceImpl service = new UserServiceImpl();
service.setUserDao(userDao());
return service;
}
database.properties
db.driverClass=org.mariadb.jdbc.Driver
db.url=jdbc:mariadb://localhost:3307/bootex?useUnicode=true&characterEncoding=utf8mb4"
db.username=bootuser
db.password=bootuser
@EnableTransactionManagement
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {
}
@EnableSqlService
@Import(value= SqlServiceContext.class)
public @interface EnableSqlService {
}
xml과 자바코드로 빈을 관리하는 방법 비교
xml로 빈들을 관리하면 프로그램 실행중에 빈을 변경해서 의존성을 변경해줄 수 있다는 장점이 있다.
하지만 최근에는 개발과 배포의 주기가 빨라졌기 때문에 자바코드로 작성하는 편이
가독성 측면에서는 장점이 있다고 생각한다.
두 가지 방법을 알아두고 상황에 맞게 사용하면 될 것이다.
'WEB > SPRING' 카테고리의 다른 글
토비2 1.3 의존성 주입방법 (1) | 2024.03.12 |
---|---|
토비2 1.2 ioc/di를 위한 빈 설정 메타정보 작성 (0) | 2024.03.06 |
토비의 스프링 7.5.2 트랜잭션 적용하기 (0) | 2024.02.19 |
토비의 스프링 7.5 DI를 이용해 다양한 구현 방법 적용하기 (0) | 2024.02.16 |
토비 스프링 7.2 인터페이스의 분리와 자기참조 빈 (0) | 2024.02.15 |