SpringBoot中的@Configuration、@MapperScan注解
作者:楠寻寻
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注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!