spring自定义starter
前言
SpringBoot
封装好了很多方便好用的starter
,那么starter
是如何实现的呢?
starter构建流程
1、引入依赖
创建一个maven
项目,然后引入基础依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2、创建自动配置类
(1)自定义对象类,User.java
public class User {
private String name;
private int age;
public User() {
this.name = "xjh";
this.age = 18;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
(2)定义自动配置类,UserAutoConfiguration.java
@Configuration
public class UserAutoConfiguration {
@Bean
@ConditionalOnClass(User.class) // 存在User.class时,才会实例化这个Bean
public User MyUser() {
return new User();
}
}
(3)声明自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.example.starter.UserAutoConfiguration
3、使用
(1)引入自定义starter
<dependency>
<groupId>org.example.starter</groupId>
<artifactId>spring-boot-starter-user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
(2)测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class Test1 {
@Autowired
private User user;
@Test
public void TestStarter() {
System.out.println(user);
}
}
测试结果:
@Conditional注解
该注解表示只有当条件成立时,才会创建Bean
。修饰类,那么类里面的所有方法都会遵循配置;修饰方法,只有修饰的方法会遵循配置。
- @ConditionalOnBean(@ConditionalOnMissingBean) 当上下文(不)存在某个对象实例时
- @ConditionalOnClass(@ConditionalOnMissingClass) 当上下文(不)存在某个类时
- @ConditionalOnExpression 当表达式成立时
- @ConditionalOnNotWebApplication 不是web应用