Spring Starter组件开发

前言

在我开始接触JAVA开发时候,Spring生态已经发展比较完善。从繁琐的XML配置转变约定大于设计的配置方式,Spring没有改变简化企业化开发的初衷,并一直向着这个目标努力。

spring核心思想

(1)基于POJO的轻量级和最小侵入性编程。
(2)通过依赖注入和面向接口实现松耦合。
(3)基于切面和惯性进行声明式编程。
(4)通过切面和模板减少样板式代码。

spring实现方式

(1)Bean(BOP)
(2)依赖注入(DI)
(3)面向切面(AOP)

Spring组件

Sring的易用性让企业开发真正来到了春天,如雨后春笋般的Spring插件不断地简化我们开发流程,让程序员可以更关心业务。比如数据库操作有Mybaits,Sharing,Codis,服务注册有Eurka和Nacos,服务熔断有Hystrix,服务限流Sentinel,分布式配置Apollo,工具类Guava。
这些组件继承了Spring的设计思想,也使Spring生态不断日渐壮大。
那么我们如何加入Spring 组件的开发?

实现原理

spring加载jar包是会读取META-INF下的spring.factories文件,通过该文件配置可在容器启动时加载指定的Bean

 # 配置解析
 org.springframework.boot.env.PropertySourceLoader
 # 生命周期监听
 org.springframework.boot.SpringApplicationRunListener
 # 错误报告
 org.springframework.boot.SpringBootExceptionReporter
 # 容器初始化
 org.springframework.context.ApplicationContextInitializer

spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lokey.starter.web.configuration.StaterConfiguration

starter包pom配置,最少依赖原则,启动需要忽略Main方法加载

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

StaterConfiguration类

@Configuration
public class StaterConfiguration {

    @Bean
    public void test(){
        System.out.println("Bean is created!");
    }

    @PostConstruct
    private void starter(){
        System.out.println("My Starter is Running!");
    }
}

通过maven install在本地,在另一个项目中引入

        <dependency>
            <groupId>com.lokey.starter</groupId>
            <artifactId>web</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

启动项目,控制台输出

My Starter is Running!
Bean is created!

补充

Spring Bean的init()和destory()方法

因为对象的生命周期都交给了Spring管理,所以Spring提供了init()和destory()函数让开发可以感知对象的创建与回收。另外@PostConstruct注解修饰的方法也会在对象创建之前执行,早于init()。

@Conditional

Conditional注解可以根据根据不同条件来决定是否加载Bean,列举几个常用的

@ConditionalOnProperty 根据参数加载

@ConditionalOnProperty(value = "xxx",havingValue = "true",matchIfMissing = true)

@ConditionalOnBean 和 ConditionalOnMissingBean Bean存在(不存在)时加载

@ConditionalOnBean(Object.class)

@ConditionalOnClass 和 @ConditionalOnMissingClass 类是否被加载

@ConditionalOnClass (Object.class)
Maven SNAPSHOT和Release

既然动手开始造轮子就要准守一些造轮子的约定

名称SNAPSHOTRelease
解释不稳定版本发行版
版本号可重复不可重复
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值