#自定义组件能够实现功能
0.yml参数配置,类似mysql-driver的数据库连接配置
1.功能方法,类似xxxTemplate使用其相关方法
2.整体拦截,类似SpringSecurity对web框架的拦截
3.其他。。。比如企业中复用的通用组件,各个部门中复用的组件
A.制作自定义start组件
#A.1创建一个空springboot项目
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http:///POM/4.0.0" xmlns:xsi="http:///2001/XMLSchema-instance"
xsi:schemaLocation="http:///POM/4.0.0 https:///xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.lanca_ip</groupId>
<artifactId>ip-spring-boot-start</artifactId>
<version>0.0.1</version>
<description>自定义组件</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--配置yml提示,有了spring-configuration-metadata.json文件,这个依赖可以不用了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
#A.2
A2.1 生成项目结构图,带注释说明
tree -L 8
└── src
└── main
├── java
│ └── cn
│ └── lanca_ip
│ ├── IpSpringBootStartApplication.java #主启动类,可以不存在的,影响不大
│ ├── config #配置项
│ │ ├── IpAutoConfiguration.java #自动配置类,注入相关功能类等操作
│ │ └── IpProperties.java #参数配置文件,用做yml传参数控制自定义组件功能
│ └── service
│ └── IpServiceImpl.java #组件提供的方法/功能
└── resources
├── META-INF #这个文件夹名称位置固定,springboot都这么写
│ ├── spring-configuration-metadata.json #其他项目使用时,做yml配置的提示
│ └── spring.factories #明确自动配置类的位置
└── application.yml
A2.2 截图
A2.3具体类贴上
IpAutoConfiguration.java
@Configuration
@EnableConfigurationProperties(IpProperties.class) //开启自动配置
public class IpAutoConfiguration {
@Bean
public IpServiceImpl ipService() {
return new IpServiceImpl();
}
}
IpProperties.java
@ConfigurationProperties(prefix = "tools.ip")
public class IpProperties {
/**
* 喊你读书你要去喂猪
*/
private Long id;
/**
* string name 名称yy
*/
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "IpProperties{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
IpServiceImpl.java
/**
* 具体的实现/功能方法
*/
@Service
public class IpServiceImpl {
@Autowired
private IpProperties ipProperties;
/**
* 具体的实现/功能方法
*/
public void printIp() {
System.out.println("+---------我是自定义Start模块中的方法----------------+");
System.out.println(ipProperties);
}
}
mvn install
将自定义的组件以maven仓库的形式install在你本地仓库,如果你自定义的组件特别优秀,使用量特别大,你最好得弄在maven的顶级仓库中去,致于怎么弄,自己想办法
B.在其他项目/模块使用start组件
#B.1 添加pom依赖,然后刷新
<dependencies>
<!-- 使用自定义组件-->
<dependency>
<groupId>cn.lanca_ip</groupId>
<artifactId>ip-spring-boot-start</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
#B.2 配置yml
tools:
ip:
id: 12
name: meihongliang
#B.3 使用
@SpringBootTest
class EsaypoiApplicationTests {
/**
* 注入功能类
*/
@Autowired
private IpServiceImpl ipService;
/**
* 使用该方法
*/
@Test
void testA() {
System.out.println("其他模块调用他人Start组件");
// 使用该方法
ipService.printIp();
}
}
#B.4 调用结果
其他模块调用他人Start组件
+---------我是自定义Start模块中的方法----------------+
IpProperties{id=12, name='meihongliang'}