searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

springboot自动装配介绍

2023-05-26 02:44:44
28
0

1 springboot自动装配的意义

通过springboot的自动装配功能,我们只需要在项目中导入需要的依赖并配合少量代码和配置文件,就可以使用第三方的组件了,简化了项目开发。

2 springboot自动装配的使用

以redis为例,如果我们项目使用了redis组件,我们如何使自己的java服务访问redis呢,有以下三步。通过以下步骤,我们创建了RedisTemplate来完成对redis的增删改查等操作。

2.1 在项目中导入依赖

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

2.2 在项目中创建RedisTemplate

@Configuration
public class RedisConfig {
    @Bean
    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
  //可以自定义设置key\Value序列化
        template.setValueSerializer();
        template.setKeySerializer();
        return template;
    }
}

2.3 定义配置文件

spring:
  redis:
    cluster:
      nodes: ip和port
    password: '***'
    timeout: 10000
    lettuce: #如果使用的jedis 则将lettuce改成jedis即可
      pool:
        max-active: 8 #默认8个
        max-wait: 8 #默认不限制
        max-idle: 8 #默认8个
        min-idle: 8 #默认 0

3 springboot自动装配的原理

springboot自动装配主要依靠注解来完成,下面以上文中的提到的RedisTemplate为例来讲解原理。

如上图所示,springboot程序启动时,@EnableAutoConfiguration注解生效,在AutoConfigurationImportSelector 类中代码会判断是否开启了自动装配,如下所示:

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    // 检查自动配置功能是否开启,默认开启,如果不开启,则返回空集合
    if (!isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    }
    // 封装将被引入的自动配置信息
    AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);
    // 返回符合条件的配置类的全限定类名数组
    return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}

在getAutoConfigurationEntry中,读取了META-INF 目录下的 spring.factories 文件,如下图所示,可以看到RedisAutoConfiguration:

但不是所有的配置类我们都需要,需要根据条件判断是否需要装配,如下所示,RedisAutoConfiguration装配的条件是RedisOperations存在。

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration=
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.ConditionalOnClass=org.springframework.data.redis.core.RedisOperations
在spring-configuration-matadata.json中,有Redis自动装配的默认值,如果不在配置文件中自定义的话,将采用默认值来初始化。如下图所示:
经过判断,我们得到了待装配的类集合,后续会被IOC容器注册为Bean。
好了,本文内容就到这里了,感谢大家阅读!

 

0条评论
0 / 1000
d****n
2文章数
0粉丝数
d****n
2 文章 | 0 粉丝
d****n
2文章数
0粉丝数
d****n
2 文章 | 0 粉丝
原创

springboot自动装配介绍

2023-05-26 02:44:44
28
0

1 springboot自动装配的意义

通过springboot的自动装配功能,我们只需要在项目中导入需要的依赖并配合少量代码和配置文件,就可以使用第三方的组件了,简化了项目开发。

2 springboot自动装配的使用

以redis为例,如果我们项目使用了redis组件,我们如何使自己的java服务访问redis呢,有以下三步。通过以下步骤,我们创建了RedisTemplate来完成对redis的增删改查等操作。

2.1 在项目中导入依赖

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

2.2 在项目中创建RedisTemplate

@Configuration
public class RedisConfig {
    @Bean
    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
  //可以自定义设置key\Value序列化
        template.setValueSerializer();
        template.setKeySerializer();
        return template;
    }
}

2.3 定义配置文件

spring:
  redis:
    cluster:
      nodes: ip和port
    password: '***'
    timeout: 10000
    lettuce: #如果使用的jedis 则将lettuce改成jedis即可
      pool:
        max-active: 8 #默认8个
        max-wait: 8 #默认不限制
        max-idle: 8 #默认8个
        min-idle: 8 #默认 0

3 springboot自动装配的原理

springboot自动装配主要依靠注解来完成,下面以上文中的提到的RedisTemplate为例来讲解原理。

如上图所示,springboot程序启动时,@EnableAutoConfiguration注解生效,在AutoConfigurationImportSelector 类中代码会判断是否开启了自动装配,如下所示:

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    // 检查自动配置功能是否开启,默认开启,如果不开启,则返回空集合
    if (!isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    }
    // 封装将被引入的自动配置信息
    AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(annotationMetadata);
    // 返回符合条件的配置类的全限定类名数组
    return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
}

在getAutoConfigurationEntry中,读取了META-INF 目录下的 spring.factories 文件,如下图所示,可以看到RedisAutoConfiguration:

但不是所有的配置类我们都需要,需要根据条件判断是否需要装配,如下所示,RedisAutoConfiguration装配的条件是RedisOperations存在。

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration=
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration.ConditionalOnClass=org.springframework.data.redis.core.RedisOperations
在spring-configuration-matadata.json中,有Redis自动装配的默认值,如果不在配置文件中自定义的话,将采用默认值来初始化。如下图所示:
经过判断,我们得到了待装配的类集合,后续会被IOC容器注册为Bean。
好了,本文内容就到这里了,感谢大家阅读!

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0