集成 spring-boot 组件教程
为什么集成 spring-boot 组件
- 随着 spring-cloud 的流行,功能化的集成spring-boot 组件是大势所趋
- 集成 spring-boot 组件可以使得 spring-cloud 架构更加美观
- 可以使得相似的功能重复使用,比如很多已经集成过的组件,如 mybatis,mq 等
- 避免写很多的 xml 配置文件
如何集成
为了使得代码清晰,这里不写复杂的逻辑,就简单的获取一些配置,但愿部分钻牛角尖的同学放过我,说引入配置直接使用注解 @Value 就好,记住这边演示的是集成组件,具体集成什么样的组件,根据你自己的需求去做,在文章结尾我也会放两个我集成的组件案例。
引入依赖
依赖的引入,主要是读取一些配置和集成 spring-boot 组件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
配置信息
一般在自己写的组件当中会读取一些配置作为初始变量,如数据库连接信息等
package com.wwjd.starter.configure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* 读取配置
*
* @author 阿导
* @CopyRight 万物皆导
* @created 2018年07月31日 16:08:00
* @Modified_By 阿导 2018/7/31 16:08
*/
@Order(Ordered.HIGHEST_PRECEDENCE)
@ConfigurationProperties(prefix = "log.wwjd")
public class DaoCofigure {
/**
* 配置信息
*/
private Map<String, Instance> instances = new LinkedHashMap<>();
/**
* 返回实例
*
* @author 阿导
* @time 2018/5/28 14:20
* @CopyRight 万物皆导
* @param
* @return
*/
public Map<String, Instance> getInstances() {
return instances;
}
/**
* 设置实例
*
* @author 阿导
* @time 2018/5/28 14:20
* @CopyRight 万物皆导
* @param instances
* @return
*/
public void setInstances(Map<String, Instance> instances) {
this.instances = instances;
}
/**
* canal 配置类
*/
public static class Instance {
/**
* 作者
*/
private String author="阿导";
/**
* 版本号
*/
private String version="1.0.0";
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
}
核心代码
这里面主要写组件的核心内容,可能会很多,我这边作为案例就是读取初始的配置
package com.wwjd.starter.configure;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
/**
* 核心代码
*
* @author 阿导
* @CopyRight 万物皆导
* @created 2018年07月31日 16:19:00
* @Modified_By 阿导 2018/7/31 16:19
*/
public class DaoConfiguration {
/**
* 配置注入
*/
@Autowired
DaoCofigure daoCofigure;
@Bean
public DaoCofigure dao(){
System.out.println("进来了");
return daoCofigure;
}
}
加载生效
一般加载配置使其生效有两种方式,第一种使用注解,代码如下
package com.wwjd.starter.annotation;
import com.wwjd.starter.configure.DaoCofigure;
import com.wwjd.starter.configure.DaoConfiguration;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
/**
* 注解方式使得组件生效
*
* @author 阿导
* @CopyRight 萬物皆導
* @created 2018/5/28 14:08
* @Modified_By 阿导 2018/5/28 14:08
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({ DaoCofigure.class,DaoConfiguration.class})
public @interface EnableDao {
}
第二种方式是通过 spring.factories 自动配置,代码如下
## Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.wwjd.starter.configure.DaoConfiguration,com.wwjd.starter.configure.DaoCofigure
这两种方式根据需要进行选择,第一种方式需要在引入的项目中要在启动类上加上注解 @EnableDao,第二种方式引入即可使用,不过切记,二者只能选择其一对一个实体进行自动配置,因为单例模式决定的。
测试功能
这个测试比较简单,这里直接通过下面方式聚能获取到注入的 dao
package com.wwjd.test.controller;
import com.wwjd.starter.configure.DaoCofigure;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试类
*
* @author 阿导
* @CopyRight 万物皆导
* @created 2018年07月31日 17:22:00
* @Modified_By 阿导 2018/7/31 17:22
*/
@RestController
public class TestController {
/**
* 注入
*/
@Autowired
private DaoCofigure dao;
@RequestMapping("/daoCofigure")
public DaoCofigure getDaoCofigure(){
return dao;
}
}