0320两种生成bean的方式

两种生成bean的方式
  1. @ComponentScan
    适用场景:适用于扫描同一个项目或包内的类,直接且简单。通过 @ComponentScan,Spring 可以扫描指定包及其子包中的类,并将其注册为 Spring 容器中的 Bean。
    功能:通过注解(如 @Component、@Service、@Repository 等)来标识需要注册到 Spring 容器的类。然后,Spring 会在启动时扫描这些类并自动注册它们。
    优点:简单直接,可以快速注册 Bean,适用于简单项目或较小的应用场景。
    限制:无法与 Spring Boot 的自动配置机制完全兼容。对于大型应用或模块化系统,可能需要更复杂的自动配置机制。
  2. spring.factories
    适用场景:这是 Spring Boot 推荐的自动配置机制,尤其适用于提供自动配置功能的模块或库。它通过 spring.factories 文件来注册自动配置类,可以根据不同条件加载和配置 Bean。
    功能:通过 spring.factories 文件,Spring Boot 可以在启动时自动加载和配置相关的 Bean。自动配置类通常是条件化的(通过 @Conditional 注解),意味着只有满足特定条件时,自动配置才会被激活。
    优点:
    灵活性高:能够根据不同环境或条件判断是否加载配置。
    与 Spring Boot 完全兼容:这是 Spring Boot 的核心配置方式,适合构建模块化、可扩展的应用。
    解耦性:模块可以提供自动配置,而不需要修改应用的启动类。
    适用场景:特别适用于希望提供自动配置的第三方库、插件或者模块。
    总结:
    @ComponentScan 适用于简单场景、项目内部的 Bean 注册,方便直接,但不适合复杂的自动配置场景。
    spring.factories 更适合复杂的自动配置和条件加载,尤其是 Spring Boot 中的自动配置,提供更高的灵活性和解耦性。
    两者都可以用来注册 Bean,但 spring.factories 更适合需要条件加载和自动配置的场景,而 @ComponentScan 更适合常规的 Bean 注册。

比如RedisTemplate,在我的项目中是直接自动注入的,因为是spring自动装配的这个bean,但是我也可以用@configuration和@bean注解来自定义配置这个bean

自动装配 RedisTemplate

如果使用的是 Spring Boot 并且依赖了 spring-boot-starter-data-redisRedisTemplate 会自动装配到你的项目中。Spring Boot 会根据你在 application.propertiesapplication.yml 中的配置来自动配置 RedisTemplate。你只需注入并使用它:

java复制代码@Autowired
private RedisTemplate<String, Object> redisTemplate;

这里,Spring Boot 自动配置了 RedisTemplate,并根据 spring.redis.* 配置项自动填充其参数(如连接工厂等)。

自定义配置 RedisTemplate

如果你需要自定义 RedisTemplate,比如自定义序列化方式、连接池配置等,你可以使用 @Configuration@Bean 注解来手动配置:

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);

        // 自定义序列化方式(例如:JSON 序列化)
        template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        template.setKeySerializer(new StringRedisSerializer());

        return template;
    }
}

在这个自定义配置中,你可以指定自定义的 序列化器(比如使用 Jackson2JsonRedisSerializer 来将对象转换为 JSON)和其他 RedisTemplate 的细节配置。

posted @ 2025-03-21 21:28  大花生加瓦  阅读(18)  评论(0)    收藏  举报