spring核心注解--@Configuration

使用场景:

1.bean的定义和注册:

        每个方法创建返回一个对象,这些对象交由spirng容器管理

@Configuration
public class AppConfig {

    @Bean
    public MyBean1 myBean1() {
        return new MyBean1();
    }

    @Bean
    public MyBean2 myBean2() {
        return new MyBean2();
    }
}

2.组件配置和高级集成:

        例如在使用springmvc的拦截器,需要将拦截器注册为spring的组件,通常实现WebMvcConfigurer接口并添加@Configuration注解

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

使用说明:

        注解的作用仅仅是进行声明,不能确保标记了@Configuration的类的配置会自动应用,这些类需要被sping容器识别并加载才会生效,以下是三种方式:

1.组件扫描--@ComponentScan:

        spring应用的启动类上添加的@SpringBootApplication注解中包含的@ComponentScan注解会扫描当前包(启动类所在包)及其子包下所有带有 @Component@Service@Repository@Controller@Configuration 等注解的类,并注册为 Spring 容器中的 beans。

        如果配置类不在扫描包的范围内,即所在包名不同,可以在主模块启动类或者默认扫描包下的任意配置类中添加@ComponentScan注解

        注意在启动类上添加扫描注解时要主动声明启动类所在包,原扫描包此时相当于被重写

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.mainapp", "com.example.module"})
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}
@Configuration
@ComponentScan(basePackages = "com.example.module")
public class MainAppConfig {
}

2.显示声明--@Import:

@Import 主要用于显式地声明要导入的配置或组件,无论这些类是否有 @Component 或其他相关注解。导入配置时同ComponentScan注解,可以加在启动类上,也可以加在能被扫描到的配置类中

@SpringBootApplication
@Import({ServiceConfig.class, RepositoryConfig.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@Configuration
@Import({ServiceConfig.class, RepositoryConfig.class})
public class MainConfig {
}

3.自动配置--spring.factories

Spring Boot 的自动配置机制允许开发者通过 spring.factories 文件来指定配置类,这些配置类在应用启动时自动加载。

src/main/resources/META-INF 目录下创建或修改 spring.factories 文件,添加创建的配置类。

# src/main/resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyServiceAutoConfiguration
  • 目的和适用性

    • @ComponentScan@Import 主要用于应用开发中,当开发者需要控制具体哪些类被 Spring 管理时使用。
    • spring.factories 中的自动配置则主要用于库或框架开发,使得库的使用者可以获得基于条件的自动配置能力,这在开发通用库或 Spring Boot Starter 时非常有用。
  • 灵活性和控制

    • @ComponentScan 提供基于路径的自动扫描,适合于大量组件需要被注册的情况。
    • @Import 提供了显式的控制,允许开发者精确地选择哪些配置或类需要注册。
    • spring.factories 提供了基于条件的自动配置,允许在不同的环境下应用不同的配置,极大地增强了配置的灵活性。
  • 35
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值