java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:
@Configuration
:声明一个类作为配置类,代替xml文件@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替
标签@Value
:属性注入@PropertySource
:指定外部属性文件。在类上添加@PropertySource("classpath:/jdbc.properties")
我们接下来用以前配置来尝试实现连接池配置
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=123
创建JdbcConfiguration类: 使用spring中的value注解对每个属性进行注入,用bean注解将返回值添加到容器中
@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfiguration {
@Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password;
@Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } } |
解读:
然后就可以在任意位置通过@Autowired注入DataSource了!
springboot对上面的配置进行了优化
在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。
在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。
JdbcProperties
,用来进行属性注入: @ConfigurationProperties(prefix = "jdbc") //这里需要定义出在application文件中定义属性值得前缀信息 public class JdbcProperties { private String url; private String driverClassName; private String username; private String password; // ... 略 // getters 和 setters } |
这里面就不需要在设置value属性,他是通过set方法进行资源自动注入的.
注意:set方法中的属性名的值要和资源文件中属性文件中值名字保持一致
Springboot在启动时并不会加载其他配置文件,它只加载默认的配置文件application.properties(yml),因此,将配置信息添加到这里,通过前缀进行区分,进行引用
之前的操作与注入方式1一样,只是这里注入的方式不一样
这里不需要添加@Autowired注解,也不需要在添加@Bean注解,在要使用数据源的类,使用他的构造方法进行注入
在方法上的形参上进行定义要注入的数据源,方法对数据源初始化处理后,通过bean注解将方法的返回值注入到容器中
不需要jdbcProperties
直接将配置注解添加到方法上,这是因为DataSource内部也是有set方法.进行自动注入.
但是,也是需要有前提的:必须保证注入的有set方法,并且set方法的名字和配制文件中的属性名需要是一样的.这里使用的是datasource中内部的set方法