可以替换Spring的配置文件的注解
配置文件:
<bean id="accountService" class="com.hans.service.impl.AccountServiceImpl">
<!--注入Dao-->
<property name="accountDao" ref="accountDao"></property>
</bean>
<bean id="accountDao" class="com.hans.dao.impl.AccountDaoImpl">
<!--注入QueryRunner-->
<property name="runner" ref="runner"></property>
</bean>
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype"><!--多例对象-->
<!--注入数据源-->
<constructor-arg name="ds" ref="dataSource"></constructor-arg>
</bean>
<!--配置数据源,c3p0架包作用-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--连接数据库必备信息-->
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mysql_practice?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai"></property>
<property name="user" value="root"></property>
<property name="password" value="123"></property>
</bean>
将配置文件写成方法放到配置类中
@Configuration //表明这是一个配置类
@ComponentScan(basePackages = "com.hans") //指定创建容器时要扫描的包
public class SpringConfig {
/**
* 创建一个QueryRunner对象
* @param dataSource
* @return
*/
@Bean(name = "runner")
@Scope(value = "prototype")//多例对象
public QueryRunner createQueryRunner(DataSource dataSource){
return new QueryRunner(dataSource);
}
/**
* 直接创建数据源对象
* @return
*/
@Bean(name = "dataSource")
public DataSource createDataSource(){
try {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mysql_practice?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai");
dataSource.setUser("root");
dataSource.setPassword("123");
return dataSource;
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
@Configuration:
作用:指定当前类是配置类
当该类作为AnnotationConfigApplicationContext的参数时,此注解可以省略
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);//此时@Configuration注解可省略
@ComponentScan:
作用:指定Spring创建容器时要扫描的包
属性:basePackages = 扫描的包,value与basePackages用法一样
相当于:<context:component-scan base-package="com.hans"></context:component-scan>
@Bean:
作用:把当前方法的返回值作为Bean存入Spring的IoC容器中
属性:name用来指定bean的id,默认为当前方法名称
使用注解配置方法时,如果方法有参数,则自动去容器中找有无匹配的bean对象
@Import:
作用:导入其他的配置类
属性:value用于指定其他配置类的字节码,有Import注解的类是主配置类(父),导入的是局部配置类(子)