用过springboot的自动配置会觉得非常方便,我们完全可以自己写一个starter pom,这样不仅可以有自动配置功能,而且具有更通用的的耦合度低的配置,

  • 新建一个starter的maven项目,以idea为例。

然后next-填好项目名字和路径finish。建好项目。

在pom.xml中加入springboot的自动配置依赖,代码如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <name>spring-boot-starter-hello</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
  • 属性配置类,代码如下:
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
private static final String MSG = "world"; private String msg = MSG; public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
}
}
这里的配置类是类型安全的属性获取。在application.properties 中通过hello.msg=world。
  • 判断依据类,代码如下:
public class HelloService {
private String msg; public String sayHello() {
return "hello " + msg;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
}
}

要根据这个类类判断是否创建这个类的bean,这个类可以是第三方类库的类。

  • 自动配置类
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello",value = "enabled",matchIfMissing = true)
public class HelloServiceAutoConfiguration {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
@ConditionalOnMissingBean(HelloService.class)
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}

代码解释:

根据HelloServiceProperties提供的参数,并通过@ConditionalOnClass判断HelloService这个类在类路径是否存在,且当容器中没有这个bean的情况下自动配置这个bean。

  • 注册配置,若想自动配置生效,需要注册自动配置类,在src/main/resources下创建META-INF/spring.factories,结构如下图所示:

spring.factories中填写如下内容注册

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

com.demo.HelloServiceAutoConfiguration

若有多个配置用“,”隔开,“\”是为了换行后能读到属性。

  • 使用stater。我们可以将spring-boot-starter-hello 通过“mvn install”安装到本地库或者发布的maven私服使用。

mvn install:install-file -Dfile=jar包的位置 -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dpackaging=jar

新建springboot项目,并将我们的starter作为依赖,代码如下:

测试代码如下:

@Controller
public class IndexController { @Autowired
HelloService helloService; @RequestMapping("/starter")
public @ResponseBody String sayHello(){
return helloService.sayHello();
}
}

在代码中直接注入HelloService的bean,但在项目中,我们没有配置这个bean。这个是通过自动配置完成的。

访问后效果如下:

然后在application.properties中配置

hello.msg= spring boot

再次访问效果如下:

在application.properties中配置debug=true,可以看到自动配置的报告。

最新文章

  1. ElasticSearch第四步-查询详解
  2. java反射学习之一反射机制概述
  3. test markdown
  4. 【翻译十七】java-并发之高性能对象
  5. 我所了解的WEB开发(4) - 神奇的URL
  6. 黄聪:Mysql5.6缓存命中率
  7. UVALive 7147 World Cup
  8. R语言的一些笔记
  9. Activiti工作流学习-----基于5.19.0版本(3)
  10. 新技能get: 使用whois查询不明网址的信息
  11. 利用select实现伪并发的socket
  12. JavaScript基础视频教程总结(131-140章)
  13. leetcode — sqrtx
  14. eshint的配置
  15. 用golang chromedp 操作已经打开的chrome浏览器
  16. MySql安装成功后无法远程登录
  17. [err]multiple definition of `***&#39;
  18. python之面向对象之封装
  19. Robotframework 简介及工作原理
  20. EditPlus 4.3.2475 中文版已经发布(10月28日更新)

热门文章

  1. Asp.net Core中文转换成拼音
  2. Winform CheckBox组,先横向排列,后纵向排列,点击文字,改变Checkbox的状态的方法
  3. thinkphp 多条件联合查询 where例句
  4. (转) Oracle SQL优化必要的全表扫描思路分析
  5. (转) ESB 企业服务总线基本内容概述
  6. Hostapd初始化失败
  7. map1
  8. 关于3.1 jmu-Java-03面向对象基础-01-构造函数与toString (3 分)
  9. Java基本的程序结构设计 数组
  10. windows中ftp下载脚本(bat+vb)