原始注解不能完全代替xml的配置, 比如
- 非自定义的bean
- 加载properties文件
- 组件扫描
- 引入其他文件
@Configuration
作用:指定当前类是一个配置类
细节:当配置类作为 AnnotationConfigApplicationContext 对象创建的参数时,该注解可以不写
@ComponentScan
作用:用于通过注解指定 Spring 在创建容器时要扫描的包
属性:
value : 它和 basepackages 的作用是一样的,都是用于指定创建容器时要扫描的包
使用此注解就等同于在 xml 中配置了:
@Bean
作用:用于把当前方法的返回值作为 bean 对象放入 Spring 的IOC容器中
属性:
name : 用于指定 bean 的 id,当不写时,默认值为当前方法的名称
细节:当我们使用注解配置方法时,如果方法有参数,Spring 框架会去容器中查找有没有可用的 bean 对象,查找的方式和 Autowired 注解的作用是一样的
@Import
作用:用于导入其他的配置类
属性:
value : 用于指定其他配置类的字节码
当我们使用 Import 的注解之后,有 Import 注解的类就是父配置类,而导入的都是子配置类
@PropertySource
作用:用于指定 properties 文件的位置
属性:
value : 指定文件的名称和路径
关键字:classpath , 表示类路径下
核心思想: 就是创建一个核心配置类, 去替代applicationContext.xml文件
在java下新建一个config包
这个包里面就放spring的配类
代码实例
/*
* 标志该类作为spring的核心配置类*/
@Configuration
/*
* 包组件扫描*/
@ComponentScan("dao")
@ComponentScan("service")
@ComponentScan("model")
/*
* 加载properties文件*/
@PropertySource("classpath:jdbc.properties")
public class SpringConfiguration { //替代applicationContext.xml
@Value("${jdbc.driver}")
private String jdbcdriver; //配合原始注解拿properties文件的信息
@Value("${jdbc.url}")
private String jdbcurl;
@Value("${jdbc.username}")
private String jdbcusername;
@Value("${password}")
private String jdbcpassword;
@Bean("druidDataSource")
public DruidDataSource getDruidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(jdbcdriver);
druidDataSource.setUrl(jdbcurl);
druidDataSource.setUsername(jdbcusername);
druidDataSource.setPassword(jdbcpassword);
return druidDataSource;
}
}
如果说, 单独一个配置类十分不方便管理, 例如这里我们可以将配置数据源单独拿出来
新建一个配置;类
/*
* 加载properties文件*/
@PropertySource("classpath:jdbc.properties")
public class DruidDataSourceConfiguration {
@Value("${jdbc.driver}")
private String jdbcdriver; //配合原始注解拿properties文件的信息
@Value("${jdbc.url}")
private String jdbcurl;
@Value("${jdbc.username}")
private String jdbcusername;
@Value("${password}")
private String jdbcpassword;
@Bean("druidDataSource")
public DruidDataSource getDruidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(jdbcdriver);
druidDataSource.setUrl(jdbcurl);
druidDataSource.setUsername(jdbcusername);
druidDataSource.setPassword(jdbcpassword);
return druidDataSource;
}
}
再导入进主配置类
/*
* 标志该类作为spring的核心配置类*/
@Configuration
/*
* 包组件扫描*/
@ComponentScan("dao")
@ComponentScan("service")
@ComponentScan("model")
/*
* 导入其他配置类*/
@Import({DruidDataSourceConfiguration.class})
public class SpringConfiguration { //替代applicationContext.xml
//这里是主配置文件的内容
}
这样一来, 基本applicationContext.xml都可以删掉了, 因为全都可以使用注解来配置了
注意
这里获取app对象就不能再用ApplicationContext的前两个实现类了
得用这个
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);