• (springboot)自定义Starter


    要引入的jar项目,即自定义的Starter项目:

    pom:(这里不能引入springboot整合否则测试项目注入失败)

    <?xml version="1.0" encoding="UTF-8"?>
    <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.example</groupId>
        <artifactId>spring-boot-starter-hello</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>2.0.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>2.0.0.RELEASE</version>
                <optional>true</optional>
            </dependency>
    
        </dependencies>
    
    
    
    </project>
    HelloAutoConfiguration:
    package com.example.springbootstarterhello.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration//开启配置
    @EnableConfigurationProperties(HelloProperties.class)//开启使用映射实体对象
    @ConditionalOnClass(HelloService.class)//存在HelloService时初始化该配置类
    @ConditionalOnProperty//存在对应配置信息时初始化该配置类
            (
                    prefix = "hello",//存在配置前缀hello
                    value = "enabled",//开启
                    matchIfMissing = true//缺失检查
            )
    public class HelloAutoConfiguration {
        //application.properties配置文件映射前缀实体对象
        @Autowired
        private HelloProperties helloProperties;
    
        /**
         * 根据条件判断不存在HelloService时初始化新bean到SpringIoc
         *
         * @return
         */
        @Bean//创建HelloService实体bean
        @ConditionalOnMissingBean(HelloService.class)//缺失HelloService实体bean时,初始化HelloService并添加到SpringIoc
        public HelloService helloService() {
            System.out.println(">>>The HelloService Not Found,Execute Create New Bean.");
            HelloService helloService = new HelloService();
            helloService.setMsg(helloProperties.getMsg());//设置消息内容
            return helloService;
        }
    }
    HelloProperties:
    package com.example.springbootstarterhello.config;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "hello")
    public class HelloProperties {
        private String msg = "test wode cesgi";
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    HelloService:
    package com.example.springbootstarterhello.config;
    
    public class HelloService {
        private String msg;
    
        public String sayHello() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }

    src/main/resources/META-INF/spring.factories

    注意:META-INF是自己手动创建的目录,spring.factories也是手动创建的文件,在该文件中配置自己的自动配置类

    #配置自定义Starter的自动化配置
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.springbootstarterhello.config.HelloAutoConfiguration

    测试项目:

    pom:

    <?xml version="1.0" encoding="UTF-8"?>
    <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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>test002</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>test002</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

    <---这里引入外来starter-->
    <dependency> <groupId>com.example</groupId> <artifactId>spring-boot-starter-hello</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

    Test:

    package com.example.test002;
    
    import com.example.springbootstarterhello.config.HelloService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class Test002ApplicationTests {
    
        @Autowired
        private HelloService helloService;
    
        @Test
        public void contextLoads() {
        }
    
        @Test
        public void rere(){
            System.out.println(helloService.sayHello());
        }
    }

    参考:https://blog.csdn.net/vbirdbest/article/details/79863883

  • 相关阅读:
    Nodejs chrome 调试node-inspector
    Nodejs 文件修改自动重启扩展
    PHP post & get请求
    mysql 忘记root密码
    Linux安装mysql
    Linux 安装reids
    技术 | TypeScript
    秦涛:深度学习的五个挑战和其解决方案
    人脸检测与识别的趋势和分析
    370 门免费编程与计算机科学在线课程
  • 原文地址:https://www.cnblogs.com/leeego-123/p/10906674.html
Copyright © 2020-2023  润新知