首页 > 其他分享 >自定义SpringBoot Starter

自定义SpringBoot Starter

时间:2023-04-11 15:25:35浏览次数:28  
标签:SpringBoot 自定义 1.2 spring service factories public Starter 加载

1. Starter加载原理

Springboot通过SpringBootApplication注解启动项目,springboot启动的时候,会将项目中所有声明为bean对象的实例加载到IOC容器。除此之外也会将starter里的bean信息加载到ioc容器,从而做到0配置,开箱即用。

1.1加载starter:

Springboot项目启动时,Springboot通过@SpringBootApplicaiton——>EnableAutoConfiguration注解进行加载starter.具体加载是有@EnableAutoConfiguration竹节虾import一个AutoConfigurationImportSelector加载器实现的

 

 这个AutoConfigurationImportSelector会去所引用的依赖jar包下,找到一个spring.factories文件,一般spring.factories文件里会声明该依赖所提供的核心功能bean配置信息。spring.factories一般在META-INF文件夹下

 

 

1.2自定义starter

某个springboot项目加载配置文件中starter原理其实就是加载依赖jar包下spring.factories文件。所以我们自定义starter就需要在项目中建立一个META-INFde文件,然后在文件夹下建一个spring.factories文件,文件里将需要提供的bean实例信息配置好就行。

 1.2.1 META-INF文件夹下新建spring.factories文件

 

 1.2.2 新建统一配置类--配置类作用是统一封装1.2.3节后中多个提供服务的service,如果仅有一个service被调用可以不用统一配置类,只需要在需要被调用service上添加@Service注解即可

package com.yxj.demostarter;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigurationDemo {
@Autowired
private DemoService demoService;
@Autowired
private UserService userService;

@Bean
public DemoService demoService(){
return demoService;
}

@Bean
public UserService userService(){
return userService;
}
}
 

 

1.2.3 服务提供类

package com.yxj.demostarter;
@Service
public class DemoService {
public String testDemo(String demo){
return demo;
}
}

 


package com.yxj.demostarter;
@Service
public class UserService {
    public String testUser(String user){
        return user;
    }
}

 


1.2.4 统一配置类DemoConfig配置到spring.factories中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yxj.demostarter.DemoConfig

1.2.5 将该项目打包上传到maven仓库

mvn clean install -Dmaven.test.skip=true

1.2.6 依赖测试
 在另一个项目中引入刚刚打包的pom依赖

<dependency>
            <groupId>com.yxj</groupId>
            <artifactId>demoStarter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>

 

1.2.7 调用测试

@RestController
public class DemoController {

    @Autowired
    private DemoService demoService;
    @Autowired
    private UserService userService;    

    @GetMapping("demo")
    public ResponseEntity demo(){
        String service = demoService.getService("demotest");
        return new ResponseEntity(service, HttpStatus.OK);
    }
    @GetMapping("user")
    public ResponseEntity user(){
        String service = userService.getService("testuser");
        return new ResponseEntity(service, HttpStatus.OK);
    }
}

 

 

参考文献

https://blog.csdn.net/qq_42394044/article/details/123906401

 

标签:SpringBoot,自定义,1.2,spring,service,factories,public,Starter,加载
From: https://www.cnblogs.com/enhance/p/17280246.html

相关文章

  • 自定义指令之光标定位到输入框
    下面是一个自定义指令的例子,当一个input元素被Vue插入到DOM中后,它会被自动聚焦。解决方案:在input标签里增加ref属性,然后在exportdefault中增加构子函数mounted(挂载完成),写入以下代码,表示页面渲染完成后光标定位输入框。mounted(){    this.$nextTick(()=......
  • 自定义结果类
    自定义结果类参考:https://www.jianshu.com/p/398bf406f8e6参考:https://blog.csdn.net/zhang150114/article/details/90477002参考:https://zhuanlan.zhihu.com/p/414255238参考:https://blog.csdn.net/dedede001/article/details/128267515......
  • SpringBoot---文件上传
    静态资源访问使用IDEA创建SPringBoot项目,会默认创建出classpath:/static/目录,静态资源一般放在这个目录下即可。如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略。在application.properties中直接定义过滤规则和静态资源位置:spring.mvc.stati......
  • 58、K8S-监控机制-Prometheus-自定义metrics
    Kubernetes学习目录1、安装python环境1.1、下载python软件wgethttps://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz1.2、安装依赖包yuminstallgccgcc-c++glibc-develglibczlib-develzlibopenssl-developensslsqlite-develreadline-develbzip2-devel......
  • Oracle自定义splitstr
     CREATEORREPLACEFUNCTIONSPLITSTR(P_STRINGINVARCHAR2,P_DELIMITERINVARCHAR2)RETURNSTR_SPLITPIPELINEDASV_LENGTHNUMBER:=LENGTH(P_STRING);V_STARTNUMBER:=1;V_INDEXNUMBER;BEGINWHILE......
  • Springboot报错:Could not resolve view with name 'index' in servlet with name 'dis
    该异常是因为用定义了带@EnableWebMvc注解的配置类后发生的,在带该注解的配置类中加入下面的代码就可以了:@BeanpublicInternalResourceViewResolverviewResolver(){InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();viewResolver.......
  • SpringBoot线程池和Java线程池的实现原理
    使用默认的线程池方式一:通过@Async注解调用publicclassAsyncTest{@Asyncpublicvoidasync(Stringname)throwsInterruptedException{System.out.println("async"+name+""+Thread.currentThread().getName());Thread.sleep(10......
  • 小程序自定义省市二级联动
    conststr=[{id:"110000",name:"北京市",city:[{id:"110100",name:"北京市",area:[{id:"110101",name:"东城区"},{id:"110102",name:"西城区"},{id:"110105",name:"朝阳区"},{id:"......
  • Java实现自定义LRU算法
    classLRUCache{//key->Node<key,val>privateHashMap<Integer,Node>map;//Node(k1,v1)<->Node(k2,v2)privateDoubleListcache;//最大容量privateintcap;publicLRUCache(intcapacity){this.c......
  • 6.自定义Form表单验证
    在web程序中存在大量的表单数据验证,而我们通过self.get_argument(arg)进行获取用户输入参数验证会存在的重复代码 1.自定义表单app.py文件代码如下:MyForm类对象属性中封装需要验证的字段并与浏览器中验证的字段保持一致,MyForm类中check_valid方法获取用户输入的参数并进行验证......