zoukankan      html  css  js  c++  java
  • Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)

    (我就是个封面)

    Spring-boot自出现后,到现在火的很,大家貌似都在用,连招聘里面也要求会这个。但是说实话,spring-boot无外乎想实现一种可插拔的编程方式,说是简化配置,其实并没有减少多少,只不过把配置落到代码里面,通过各种annotation来标示了。

    作为个人其实不太愿意团队用spring-boot这种层层封装的方式,各种jar铺天盖地,最终大家都被绑架了,自己底层的能力不一定有什么提高。

    spring-boot的starter又是个什么鬼?
    一句话,spring-boot的starter是一个通过maven完成自包含并通过annotation配置使得可被spring上下文发现并实例化的一个可插拔的组件或服务。

    spring-boot有两种starter

    一种是内部已经支持的,一种是第三方的。

    内部支持starter:

    其通过@ConditionalOnClass来实决定是否例化(ConditionalOnClass是指当在classpath发现需要的依赖的类时实例化),想要启动这个服务,只要要配置上对应的starter,这个starter就能把所需要的jar给关联上。

    类似于我们对log的使用,默认使用slf4j这个api接口,提供一个钩子,classpath里面谁实现了这个机构,谁就挂到这个钩子上成为log具体实现,其中log4j就是一个实现。

    通过spring的如下maven配置即可看见里面已经通过dependencyManagement(这个时maven的依赖管理,不用的时候不会加载)给你配置好了所有内置starter。只需要用的时候把对应的starter依赖配置上就行了。

    <dependency>

     <groupId>org.springframework.boot</groupId>

     <artifactId>spring-boot-starter</artifactId> <

    /dependency>

    所有的starter其实都是要通过代码配置被上下文发现的,可以在spring-boot-autoconfigure-xxx.jar去看,如下:。

    内置的tomcat,jetty也在里面:

    具体代码:

    通过ConditionalOnClass只要发现了tomcat这个类(配置了spring-boot-starter-web的maven依赖后就会会有),就会启动tomcat的服务。

    第三方starter:

    比如mybatis等。

    原理是一样的,就是在你已经实现的服务代码之上封装一层配置代码就行,看看mybitis的,这是mybatis-spring-boot-starter的依赖。

    <dependency>

    <groupId>org.mybatis.spring.boot</groupId>

    <artifactId>mybatis-spring-boot-starter</artifactId>

    <version>1.3.0</version>

    </dependency>

    这个依赖是一个pom,点进去可以看见自包含的依赖关系,其中一个就是mybatis的autoConfigure,通过@bean等annotation完成对mybatis的实例化配置,如下:

    具体代码:

    基于这个机制,我们自己也可以实现一个

    本次实现一个简单的数据库操作组件,类似于mybatis,只不过只实现了简单的查询服务。

    整个示例有两个工程:

    一个实现我们自己的starter(取名叫spring-boot-mydao-starter),最后会打成ar包,并install到本地maven本地厂库里。

    另外一个工程用于测试,最终会依赖spring-boot-mydao-starter整个组件,并调用里面的查询服务去测试。

    工程

    具体类如下:

    1、创建spring-boot-mydao-starter工程,添加相关依赖配置

    我们实现的这个组件仅仅依赖于mysql的驱动以及spring-boot的上下文环境。其中mysql驱动用的spring-boot-starter-parent里面配置好的,这里直接用即可,maven配置如下:

    2、实现以下几个类:

    Mydao:封装数据库的连接和查询服务,和spring没有任何关系。

    MyDaoAutoConfiguration:提供MyDao的配置用于启动时被spring上下文发现并解析。

    DbProperties:完成对数据库配置参数文件的读取(db.properties,当然spring-boot也支持其他格式的配置文件,个人还是喜欢传统样式)。

    其中Mydao:

    MyDaoAutoConfiguration(将配置参数对象传给Mydao并配置Mydao实例):

    Spring在启动时会通过@Bean实例化Mydao并将其放入ConfigurableApplicationContext容器中。

    配置文件类DbProperties:

    自动读取classpath下的db.properties的配置文件,并实例化成类对象。配置文件需要在测试的工程(test-spring-boot-mydao-starter)里提供。

    配置文件db.properties

    以上就是真个starter的类容。下面描述如何使用这个starter。

    新建测试工程test-spring-boot-mydao-starter(起啥名都行)。配置上对我们的starter的依赖:

    因为starter里面已经依赖了spring-boot的上下文,所以这里就不用配置了。

    然后就是测试:

    我们用mysql自带的数据库里面的user表做测试。以下是测试类,需要注入starter里面的mydao:

    然后就是启动测试:

    也可以用spring的junit来测试。

    ~以上便是本次分享所有内容~

    源码下载

    为防止地址失效,所有下载链接都在公众号维护,请关注公众号后,回复“R003” 获取完整源码。

    扩展阅读:模块化编程及Maven配置最佳实践之一

  • 相关阅读:
    属性选择器(通常用在input)
    函数调用的文档注释
    List集合操作
    数组排序三种方法
    字符串反序输出字符串
    js中完美运动框架
    查找100-200之间是否存在水仙花数
    提示用户输入一个正整数,如果错误,则重新输入,可以使用以下的代码来保证用户输入正确:
    Ubuntu 16.10下的 jdk 1.8.0_111
    方法内部类
  • 原文地址:https://www.cnblogs.com/qiaobing/p/10985748.html
Copyright © 2011-2022 走看看