使用Spring的IOC案例基于XML
在XML配置中待改造的问题:
<context:component-scan base-package=“com.cn”/>扫描包
数据源以及QueryRunner的配置都需要进行配置,离不开bean.xml配置文件
解决:
添加配置类:
SpringConfiguration.java
//spring的配置类,相当于bean.xml文件
@Configuration
@ComponentScan("com.cn")
@Import({
JdbcConfig.class})
public class SpringConfiguration {
/**
* @Configuration:
* 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。
* 获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。
*
* @ComponentScan:
* 已经把配置文件用类来代替了,创建容器时要扫描的包需要用:@ComponentScan
* 用于指定spring在初始化容器时要扫描的包。
* 作用和在spring的xml配置文件中的:
* <context:component-scan base-package="com.cn"/>是一样的。
*
* @Bean:
* 从配置文件中移除数据源和QueryRunner对象:
* 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
* name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
*
* 有了两个配置类SpringConfiguration和JdbcConfig,但是他们还没有关系。所以建立他们的关系:
* @Import:
* 用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。
* value[]:用于指定其他配置类的字节码。
**/
}
JdbcConfig.java
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
/**
* @Bean:
* 从配置文件中移除数据源和QueryRunner对象:
* 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
* name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
*
* @PropertySource:
* 用于加载.properties文件中的配置。
* 例如我们配置数据源时,可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置。
* value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:
* **/
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//创建一个数据源,并存入spring容器中
@Bean(name="dataSource")
public DataSource createDataSource() {
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
// ds.setUser("root");
// ds.setPassword("1234");
// ds.setDriverClass("com.mysql.jdbc.Driver");
// ds.setJdbcUrl("jdbc:mysql:///spring_day02");
ds.setDriverClass(driver);
ds.setJdbcUrl(url);
ds.setUser(username);
ds.setPassword(password);
return ds;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//创建一个QueryRunner,并且也存入spring容器中
@Bean(name="queryRunner")
public QueryRunner createQueryRunner(DataSource dataSource) {
return new QueryRunner(dataSource);
}
}
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///ideawork?useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
基于XML案例中删除bean.xml配置文件,由于没有配置文件了,获取容器通过:
private ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);