本文共 2905 字,大约阅读时间需要 9 分钟。
springboot的默认配置方式和我们之前玩的配置方式不太一样,没有任何的xml。那么如果自己要新增配置该怎么办?比如我们要配置一个数据库连接池,以前会这么玩:
现在该怎么做呢?
事实上,在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,我们不妨来回顾一下Spring的历史:
Spring1.0时代
在此时因为jdk1.5刚刚出来,注解开发并未盛行,因此一切Spring配置都是xml格式,想象一下所有的bean都用xml配置,细思极恐啊,心疼那个时候的程序员2秒
Spring2.0时代
Spring引入了注解开发,但是因为并不完善,因此并未完全替代xml,此时的程序员往往是把xml与注解进行结合,貌似我们之前都是这种方式。
Spring3.0及以后
3.0以后Spring的注解已经非常完善了,因此Spring推荐大家使用完全的java配置来代替以前的xml,不过似乎在国内并未推广盛行。然后当SpringBoot来临,人们才慢慢认识到java配置的优雅。
有句古话说的好:拥抱变化,拥抱未来。所以我们也应该顺应时代潮流,做时尚的弄潮儿,一起来学习下java配置的玩法。
java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:
@Configuration
:声明一个类作为配置类,代替xml文件
@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替<bean>
标签
@Value
:属性注入
@PropertySource
:指定外部属性文件。
我们接下来用java配置来尝试实现连接池配置
首先在pom.xml中,引入Druid连接池依赖:
com.github.drtrang druid-spring-boot2-starter 1.1.10
jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/leyoujdbc.username=rootjdbc.password=12356
创建JdbcConfiguration类:
package com.learn.springboot.config;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import javax.sql.DataSource;@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; }}
解读:
@Configuration
:声明JdbcConfiguration
是一个配置类。
@PropertySource
:指定属性文件的路径是:classpath:jdbc.properties
通过@Value
为属性注入值。
通过@Bean将 dataSource()
方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签
然后就可以在任意位置通过@Autowired
注入DataSource了!
我们在HelloController
中测试:
package com.learn.springboot.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.sql.DataSource;@RestController@EnableAutoConfigurationpublic class HelloController { @Autowired private DataSource dataSource; @GetMapping("show") public String test(){ return "hello Spring Boot!"; }}
在test方法中打一个断点,然后Debug运行并查看:
属性注入成功了!
转载地址:http://rzuzb.baihongyu.com/