SpringBoot中的@Configuration、@MapperScan注解

 更新时间:2024年11月09日 11:53:37   作者:楠寻寻  
SpringBoot中的@Configuration和@MapperScan注解分别用于配置类和Mapper接口的自动扫描,感兴趣的朋友跟随小编一起看看吧

SpringBoot中的@Configuration、@MapperScan注解

1、@Configuration注解

  • @Configuration注解用于标记一个类为配置类,表示该类包含一个或多个@Bean方法,这些方法返回的实例会被Spring容器管理。
  • 配置类替代了传统的XML配置文件,使得配置更加简洁和类型安全

使用方式:

  • 在需要定义Bean的类上添加@Configuration注解
  • 在类中使用@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;
}
  • @Configuration注解的类会被Spring容器识别,并且类中的@Bean方法会调用,返回的实例会被注册到Spring容器中。
  • @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 {
    // 其他配置
}

使用场景:

  • 当项目中有多个Mapper接口时,使用@MapperScan注解可以一次性扫描并注册所有的Mapper接口,避免在每个接口上手动添加@Mapper注解。
  • 适用于使用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。

到此这篇关于SpringBoot中的@Configuration、@MapperScan注解的文章就介绍到这了,更多相关SpringBoot中的@Configuration、@MapperScan注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 关于ApplicationContext的三个常用实现类

    关于ApplicationContext的三个常用实现类

    这篇文章主要介绍了关于ApplicationContext的三个常用实现类,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Spring如何消除代码中的if-else/switch-case

    Spring如何消除代码中的if-else/switch-case

    这篇文章主要给大家介绍了关于Spring如何消除代码中if-else/switch-case的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Spring重试支持Spring Retry的方法

    Spring重试支持Spring Retry的方法

    本篇文章主要介绍了Spring重试支持Spring Retry的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java虚拟机堆内存溢出的原因和解决方法

    Java虚拟机堆内存溢出的原因和解决方法

    在Java开发中,内存溢出(OutOfMemoryError)是一个常见的问题,尤其是在处理大量数据或长时间运行的应用时,本文将通过一个简单的示例,展示如何通过JVM参数和代码分析来理解和解决内存溢出问题,需要的朋友可以参考下
    2024-10-10
  • Jenkins远程部署war包过程图解

    Jenkins远程部署war包过程图解

    这篇文章主要介绍了Jenkins远程部署war包过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java对象初始化过程代码块和构造器的调用顺序

    Java对象初始化过程代码块和构造器的调用顺序

    这篇文章主要介绍了Java对象初始化过程代码块和构造器的调用顺序,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • 详解maven的setting配置文件中mirror和repository的区别

    详解maven的setting配置文件中mirror和repository的区别

    这篇文章主要介绍了详解maven的setting配置文件中mirror和repository的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 配置Servlet两种方法以及特点详解

    配置Servlet两种方法以及特点详解

    这篇文章主要介绍了配置Servlet两种方法以及特点详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • MybatisPlus字段类型转换的实现示例

    MybatisPlus字段类型转换的实现示例

    本文主要介绍了MybatisPlus如何完成字段类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 关于JSqlparser使用攻略(高效的SQL解析工具)

    关于JSqlparser使用攻略(高效的SQL解析工具)

    这篇文章主要介绍了关于JSqlparser使用攻略(高效的SQL解析工具),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论