配置的历史:
- Spring1.0时代
此时jdk1.5刚刚出来 注解开发并未盛行 一些Spring配置都是xml格式 - Spring2.0时代
Spring引入了注解开发 但并不完善 因此并未完全替代xml 此时是将xml与注解相结合 - Spring3.0时代
3.0以后的Spring的注解已经非常完善了 因此Spring推荐使用完全的java配置来代替xml配置
但在国内并未推广流行 - 现在Spring的版本已经到了5.x了
配置方式的比较:
1、传统的XML配置方式的属性注入
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
2、Java配置(可读性强 容易被理解)
Java配置主要靠Java类和一些注解代替xml
常用注解:
- @Configuration:声明一个类作为配置类 代替xml文件
- @Bean:声明在方法上 将方法的返回值加入Bean容器 代替标签
- @Value:属性注入
- @PropertySource:指定外部属性文件
①、Java配置方式的属性注入:
@Configuration
@PropertySource(value = "classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.url}")
String url;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource getDataSource()
{
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
②、Spring Boot优化后的Java配置方式的属性注入【方式一】
特点:可复用 ★
属性Java文件:
单纯获得配置文件中的属性
注解:
@ConfigurationProperties(prefix = "")注解可以将配置文件中的配置绑定到一个类中 代表这是一个配置文件
prefix声明了要使用的配置的属性名的前缀为"jdbc"
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
String driverClassName;
String url;
String username;
String password;
...
}
使用属性文件:
注解:
在配置了@Configuration注解之后 Spring就会将该类当做一个xml文件 并读取其中的内容
@EnableConfigurationProperties代表启用配置属性并交给Spring容器 此后就可以在任何地方使用该配置
@Bean声明在方法上 将方法的返回值加入Bean容器 代替<Bean>标签
将添加该注解的方法的返回值添加到容器中 容器中该组件的默认id为方法的方法名
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
@Bean
public DataSource getDataSource(JdbcProperties jdbcProperties)
{
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
dataSource.setUrl(jdbcProperties.getUrl());
dataSource.setUsername(jdbcProperties.getUsername());
dataSource.setPassword(jdbcProperties.getPassword());
return dataSource;
}
}
@EnableConfigurationProperties之后可以随意使用配置文件类
例:
@Autowired
JdbcProperties jdbcProperties;
public JdbcConfig(JdbcProperties jdbcProperties){
this.jdbcProperties=jdbcProperties;
}
③、Spring Boot优化后的Java配置方式的属性注入【方式二】
特点:更优雅 ★
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource getDataSource()
{
return new DruidDataSource();
}
流程:
当Spring扫描到@Bean即调用该方法
然后知道要使用以"jdbc"开头的属性 就会去配置文件检查符合条件的属性值
然后检查返回的类是否有同名的set()方法 若有 即自动注入
总结:
SpringBoot推荐给容器中添加组件的方式:即全注解的方式
- 1、配置类添加
@Configuration注解以取代Spring配置文件 - 2、使用
@Bean注解给容器中添加组件
从Spring1.0到5.x,配置方式经历了从XML到注解再到Java配置的转变。3.0后,Java配置逐渐成熟,SpringBoot进一步优化,推荐全注解配置,如@Configuration与@Bean。本文详细对比了XML、Java配置及SpringBoot优化后的配置方式。
9171

被折叠的 条评论
为什么被折叠?



