「这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战」。
前言
在使用 SpringBoot 开发时,我们已经习惯了使用注解去引入依赖,但是其实很多注解的功能是一样的,所以在合适的地方使用合适的注解,可以提高代码的可读性,帮助我们更好的理解项目结构。
常用注解
1. @Component、@Controller、@Service、@Repository 的区别
一句话,除了名字不同,作用完全等价。@Controller、@Service、@Repository 就相当于三件衣服,穿衣服的人就是 @Component
源码
这几个注解的本质都是一样的,往容器中添加
bean,之所以准备这么多套衣服,是为了帮助我们更好的划分代码结构。@Controller 控制层类,@Service 业务层类,@Repository 持久层类,@Component 无法归类到前 3 种时就称为组件。
2. @ComponentScan、@Import
@ComponentScan
@ComponentScan 指定包扫描 等同于原先的
<context:component-scan>, 当我们加上@ComponentScan(value = "com.xxx.xxx")时会扫描该路径下的所有组件配置类。
basePackages与value: 用于指定包的路径,进行扫描basePackageClasses: 用于指定某个类的包的路径进行扫描nameGenerator:bean的名称的生成器useDefaultFilters: 是否开启对@Component,@Repository,@Service,@Controller的类进行检测includeFilters: 包含的过滤条件FilterType.ANNOTATION:按照注解过滤FilterType.ASSIGNABLE_TYPE:按照给定的类型FilterType.ASPECTJ:使用ASPECTJ表达式FilterType.REGEX:正则FilterType.CUSTOM:自定义规则excludeFilters: 排除的过滤条件,用法和includeFilters一样
@Import
和组件配合使用,给容器中导入我们指定的类型的
bean
1  | java复制代码@Import({User.class, DBHelper.class})  | 
当加上这个注解,会调用指定类的无参构造器,创建出对于的实例对象,注入到容器中。
3. @Conditional
这个注解的作用是按条件装配,当满足 Conditional 指定的条件时,才会进行组件注入。
Ctrl + H打开打开继承树
这是一组注解,满足对应得条件,才会进行组件注入,比如一下几个:
@ConditionalOnBean: 当容器中存在指定bean时才会做下面的操作@ConditionalOnMissingBean: 当容器中不存在指定bean时才会做下面的操作@ConditionalOnClass: 当容器中存在指定类时,执行操作@ConditionalOnMissingClass: 当容器中不存在指定类时,执行操作
这里就不一一列举了,等到使用得时候再详细了解。
4. @ImportResource
@ImportResource(value = "classpath:bean.xml")在配置类上加上该注解,相当于将类路径下bean.xml配置文件里得信息重新解析,放到容器里。
5. @ConfigurationProperties
当类加上这个注解,属性的值会从配置文件中加载,比如
@ConfigurationProperties(prefix = "user")会在配置文件中找到前缀为user 的配置,后面的属性一一对应上。注意:
- 只有这个类是容器中的组件,该注解才会生效,所以一般会和
 @Component一起出现。- 避免使用关键字,比如,如果你使用
 user,Sprig会优先取系统的环境变量值,这时你会发现你配置的没有生效。- 前缀不支持驼峰式命名
 - MyUser*
 
1  | java复制代码@Component  | 
application.yml
1  | yml复制代码myuser:  | 
获取 bean 打印输出
1  | ini复制代码MyUser{name='zhangsan', age='12'}  | 
6. @EnableConfigurationProperties
将指定的类注入到容器中,使配置了
@ConfigurationProperties注解的类完成属性绑定。如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties配置文件转化的bean。
本文转载自: 掘金