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。
-