SpringBoot原理(二)---自动配置原理&自定义starter

1.自动配置的思想:

1.收集Spring开发者的 编程习惯,整理开发过程中使用的常用技术列表--->技术集A
2.收集常用技术(技术集A)的使用参数,整理开发过程中每个技术的常用设置列表--->设置集B
3.初始化springboot的基础环境,加载用户自定义的bean和导入的其他坐标,形成初始化环境
4.将技术集A包含的所有技术都定义出来,在spring/springboot启动时默认加载全部
5.将技术集A中具有使用条件的技术(通过@Conditionalxxx)约定出来,设置为按条件加载,由开发者决定是否使用该技术(与初始化环境进行比较)
6.将设置集B作为默认配置加载(约定大于配置),减少开发者配置工作量
7.开放设置集B的配置覆盖接口,由开发者根据自身需要决定是否覆盖配置
约定大于配置:
	springboot 将技术的默认配置配好,用不用这些配置取决于开发者自己,减少了开发者配置的工作量

2.自定义starter

设计一个starter,该starter的功能为当用户访问网页的时候,记录访问次数和IP地址

1.创建一个springboot工程,定义包含业务功能的类IpCountServiceImpl

package com.itheima.service.impl;

import com.itheima.service.IpCountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Service
public class IpCountServiceImpl implements IpCountService {
    //map用来存放数据
    private Map<String,Integer> ipCountMap=new HashMap<>();

    @Autowired
    //当前的request对象的注入工作由使用当前starter的工程提供自动装配
    private HttpServletRequest httpServletRequest;

    @Override
    public void count() {
        //每次调用当前操作,就记录当前访问的IP,然后累加访问次数
        //1.获取当前操作的IP地址
        String ip=httpServletRequest.getRemoteAddr();
        //2.根据Ip地址从map取值,并且递增
        Integer count=ipCountMap.get(ip);
        if(count==null)
        {
            ipCountMap.put(ip,1);
        }
        else
        {
            ipCountMap.put(ip,count+1);
        }
    }
}

2.在config包下创建自动配置类IpAutoConfiguration,将IpCountServiceImpl导入

可以使用@Import注解导入,也可以用@Bean

package com.itheima.autoconfig;

import com.itheima.service.IpCountService;
import com.itheima.service.impl.IpCountServiceImpl;
import org.springframework.context.annotation.Bean;

public class IpAutoConfiguration {
    @Bean
    public IpCountService ipCountService()
    {
        return new IpCountServiceImpl();
    }
}

3.在resources目录下创建META-INF目录,在META-INF目录下创建spring.factories

在这里插入图片描述

4.在spring.factories中导入IpAutoConfiguration类

通过自动配置的形式加载业务功能

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.itheima.autoconfig.IpAutoConfiguration

5.将项目clean后,在安装到本地仓库

在这里插入图片描述

至此一个简易的starter就定义好了,使用的时候在项目的Pom.xml文件中导入即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个简化Spring应用开发的框架,它通过自动配置的方式来减少开发者的工作量,提高开发效率。SpringBoot自动配置原理是什么呢? 首先,SpringBoot自动配置是基于SpringBoot的starter依赖功能实现的。starter依赖本质上是一个Maven项目,里面包含了一些依赖和必要的资源,只需将这个项目引入到应用中,就能自动加载依赖并进行一些默认配置Spring Boot框架中一些核心的starter依赖包括spring-boot-starter-web、spring-boot-starter-data-jpa、spring-boot-starter-data-redis等等,开发者可以根据自己的需要引入合适的starter依赖。 其次,SpringBoot自动配置是基于条件注解实现的。条件注解是Spring框架提供的一种特殊注解,它能够根据指定的条件来判断是否需要加载某个组件或配置Spring Boot中,提供了很多条件注解,如@ConditionalOnClass、@ConditionalOnProperty等等,它们可以根据类是否存在、属性是否配置等条件来决定是否加载某个组件或配置。 最后,SpringBoot自动配置还包含了一些默认的配置,这些默认配置可以通过自定义配置来覆盖或扩展。例如,在使用spring-boot-starter-web时,SpringBoot会默认配置Tomcat容器来运行Web应用,如果开发者需要使用其他容器如Jetty或Undertow,可以写一个配置类来覆盖默认配置。 综上所述,SpringBoot自动配置是基于starter依赖、条件注解和默认配置实现的。它大大减少了开发者的工作量,提高了开发效率,同时也保证了应用的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值