自定义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);
    }
}

测试结果:
自定义starter

@Conditional注解

该注解表示只有当条件成立时,才会创建Bean。修饰类,那么类里面的所有方法都会遵循配置;修饰方法,只有修饰的方法会遵循配置。

  • @ConditionalOnBean(@ConditionalOnMissingBean) 当上下文(不)存在某个对象实例时
  • @ConditionalOnClass(@ConditionalOnMissingClass) 当上下文(不)存在某个类时
  • @ConditionalOnExpression 当表达式成立时
  • @ConditionalOnNotWebApplication 不是web应用

自定义starter

上一篇:单例模式


下一篇:@Bean与@Component的联系与区别