SpringBoot中的@Configuration、@MapperScan注解

SpringBoot中的@Configuration、@MapperScan注解

1、@Configuration注解

  • @Configuration注解用于标记一个类为配置类,表示该类包含一个或多个@Bean方法,这些方法返回的实例会被Spring容器管理。

  • 配置类替代了传统的XML配置文件,使得配置更加简洁和类型安全

使用方式:
  1. 在需要定义Bean的类上添加@Configuration注解

  2. 在类中使用@Bean注解的方法来定义和初始化Bean

示例:

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}
使用场景:
  • 当需要定义和管理多个Bean时,使用@Configuration注解的类来集中管理这些Bean。

  • 替代XML配置文件,使配置更加简洁和易于维护。

底层原理:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";

    boolean proxyBeanMethods() default true;
}
  1. @Configuration注解的类会被Spring容器识别,并且类中的@Bean方法会调用,返回的实例会被注册到Spring容器中。

  2. @Configuration类会被编译成一个代理类,确保@Bean方法的调用是线程安全的,并且可以支持方法间的依赖注入。

@Configuration 注解的底层原理

  • Spring 容器启动:Spring 容器启动时,会扫描带有 @Configuration 注解的类。

  • 解析 @Configuration:创建并注册配置类实例到容器。

  • 解析 @Configuration 类中的 @Bean 方法:创建并注册 @Bean 方法定义的 Bean 到容器。

  • 初始化 Configuration 类中的 Bean:初始化配置类中的 Bean。

  • 配置完成:配置完成。


2、@MapperScan注解

  • @MapperScan注解用于扫描指定包下的所有Mapper接口,并将它们注册为Spring管理的Bean

  • 常用与Mybatis框架中,自动扫描并注册Mapper接口,避免手动在每个Mapper接口中添加@Mapper注解

使用方式:
  • 在配置类上添加@MapperScan注解,并指定需要扫描的包路径。

  • 示例:

@Configuration
@MapperScan("com.briup.*.mapper")
public class MyBatisConfig {
    // 其他配置
}
使用场景:
  1. 当项目中有多个Mapper接口时,使用@MapperScan注解可以一次性扫描并注册所有的Mapper接口,避免在每个接口上手动添加@Mapper注解。

  2. 适用于使用Mybatis框架的项目,简化Mapper接口的管理。

底层原理:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import({MapperScannerRegistrar.class})
@Repeatable(MapperScans.class)
public @interface MapperScan {
    String[] value() default {};

    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends Annotation> annotationClass() default Annotation.class;

    Class<?> markerInterface() default Class.class;

    String sqlSessionTemplateRef() default "";

    String sqlSessionFactoryRef() default "";

    Class<? extends MapperFactoryBean> factoryBean() default MapperFactoryBean.class;

    String lazyInitialization() default "";

    String defaultScope() default "";
}
  • @MapperScan注解通过ClassPathMapperScanner类来扫描指定包下的所有接口。

  • @ClassPathMapperScanner会查找所有带有@Mapper注解的接口,并将它们注册为Spring管理的Bean

  • 注册的Bean会配置为Mybatis的SqlSessionTemplate或SqlSessionDaoSupport的代理对象,从而可以在业务逻辑中直接使用这些Mapper接口。

@MapperScan 注解的底层原理
  • Spring 容器启动:Spring 容器启动时,会扫描带有 @MapperScan 注解的类。

  • 解析 @MapperScan 注解:扫描指定包下的 Mapper 接口。

  • 创建并注册 Mapper 接口的实现类到容器:创建并注册 Mapper 接口的实现类到容器。

  • 初始化 Mapper 实现类:初始化 Mapper 实现类。

  • 配置完成:配置完成。

总结:

  • @Configuration 注解

    • 功能:标记一个类为配置类,包含 @Bean 方法。

    • 使用方式:在类上添加 @Configuration 注解,类中使用 @Bean 注解的方法定义 Bean。

    • 使用场景:集中管理多个 Bean,替代 XML 配置文件。

    • 底层原理:类被编译成代理类,@Bean 方法被调用,返回的实例注册到 Spring 容器中。

  • @MapperScan 注解

    • 功能:扫描指定包下的所有 Mapper 接口,并注册为 Spring 管理的 Bean。

    • 使用方式:在配置类上添加 @MapperScan 注解,指定需要扫描的包路径。

    • 使用场景:简化 MyBatis 框架中 Mapper 接口的管理,避免手动添加 @Mapper 注解。

    • 底层原理:通过 ClassPathMapperScanner 类扫描接口并注册为 Spring 管理的 Bean。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值