「这是我参与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
。
本文转载自: 掘金