SpringBoot常用注解
@SpringBootApplication
核心注解。包括**@Configuration,@EnableAutoConfiguration,@ComponentScan**。
@Configuration
从spring3.0开始用于定义配置类,可替换xml配置文件,该类中包含被@Bean注解的方法, 这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@EnableAutoConfiguration
实现**@Configuration注解的类中bean的自动装配。 帮助SpringBoot应用将所有符合条件的@Configuration**配置都加载到当前SpringBoot,并创建对应配置类的Bean,并把该Bean实体交给spring容器进行管理。
@ComponentScan
默认装配标识了**@Controller,@Service,@Repository,@Component**注解的类到spring容器中。
@Bean
Spring的@Bean注解用于方法上,该方法会产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
@Conditional
设置产生bean的条件,只有满足了该条件,bean才能正常创建。防止因对象为实例化等原因而产生的空指针或其他异常。与**@Bean**搭配使用,如 @Conditional(TestCondition.class) 意味着仅当TestCondition存在于ClassPath中时才生效,一般使用他的分支。
常见conditional注解
@ConditionalOnBean 框架中存在某个Bean时生效
@ConditionalOnMissingBean 在Bean不存在时生效
@ConditionalOnClass框架中存在某个Class时生效
@ConditionalOnMissingClass在Class不存在时生效
@ConditionalOnWebApplication 当前是web环境
@ConditionalOnNotWebApplication 当前不是web环境
@ConditionalOnProperty 当前框架中是否包含特定的属性
@ConditionalOnJava 当前是否存在某个Java版本
@MapperScan
mybatis的注解,通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如:
1 |
在启动类使用该注解后无需在mapper类中加上**@mapper**
@ServletComponentScan
在启动类上使用该注解后,Servlet、Filter、Listener可以直接通过**@WebServlet、@WebFilter、@WebListener**注解自动注册
####@Component、@Repository、@Service、@Controller
我们一般使用 @Autowired注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,可以采用以下注解实现:
- @Component :通用的注解,可标注任意类为
Spring
组件。如果一个 Bean 不知道属于哪个层,可以使用**@Component** 注解标注。 - @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
- @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
- @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
可以用**@Service(“userDetailsService”)**等方式标注bean的id,默认id为首字母小写的类名。
@RestController、**@ResponseBody**
@RestController注解是**@Controller和@ResponseBody**的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。
单独使用 @Controller不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。**@Controller** +@ResponseBody 返回 JSON 或 XML 形式数据
@RequestMapping
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 它有方法级别注解和类级别注解两种类型。其属性为:
(1) value: 指定request的地址
(2) method: 指定请求的method类型, GET、POST、PUT、DELETE等
(3) **params:**指定request中包含的某些参数值,作为方法的输入
@RequestParam(value = “disable”, required = false)
value 值为传入的参数
required 设置为 false,若传入的 value 为空值,则报错
required 设置为 true,若传入的 value 为空值,则返回 null
(4) consumes: 指定处理请求的提交内容类型,例如 application/json, text/html;
(5) produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
(6) headers: 指定request中包含某些指定的header值,让该方法处理请求
@GetMapping、@PostMapping…
分别用于处理HTTP的get请求、post请求等。相当于指定method类型的**@RequestMapping**
@PathVariable和@RequestParam
用于前端向后端传值时,获取url中的信息。
如:
1 | GetMapping("/klasses/{klassId}/teachers") |
如果我们请求的 url 是:**/klasses/{123456}/teachers?type=web**
那么我们服务获取到的数据就是:klassId=123456,type=web。
@RequestBody
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。
@Slf4j
lf4j是一个日志标准,使用它可以完美的桥接到具体的日志框架,必要时可以简便的更换底层的日志框架,而不需要关心具体的日志框架的实现(slf4j-simple、logback等)
该注解会自动创建loggger类的bean。并注入被注解的类,相当于private final Logger log = LoggerFactory.getLogger(XXX.class)
idea需要安装lombok插件,否则会找不到注解生成的log变量从而报错。
@Autowired、@Resource
实现容器的自动装配。spring会在应用上下文中为被注解的属性寻找其依赖的bean。是DI(依赖注入)的核心。
两者的异同:
1、**@Autowired与@Resource**都可以用来装配bean。都可以写在字段上,或写在setter方法上。
2、**@Autowired**默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
3、**@Resource**(属于J2EE规范),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
它们的作用相同都是用注解方式注入对象,但执行顺序不同。**@Autowired先byType,@Resource**先byName。
@value、 @ConfigurationProperties、 @PropertySource
用于从配置文件中读取配置信息,以下默认配置文件为application.yml:
- @value:用于读取比较简单的信息,功能很强大,除了能够注入配置信息,还可以直接注入普通字符串、操作系统属性、表达式结果甚至是其它Bean的属性等等,格式一般为: @Value(“${property}”) ,property为key值。
- @ConfigurationProperties : 可以把同类的配置信息自动封装成实体类 ,用于大量属性值和配置文件的映射。格式一般为 @ConfigurationProperties(prefix = “library”) ,library为实体类的类名。
- @PropertySource :用于指定配置文件,可以与**@value**和
@ConfigurationProperties搭配使用
详细分析参考:【小家Spring】Spring中读取配置的方式,@Value、@PropertySource、@ConfigurationProperties使用详解
@Transactional
在方法上使用时表示该方法开启事务,在类上使用表示 该类的public 方法都配置相同的事务属性信息 。属于Spring提供的声明式事务的实现方式之一。注解的属性里可以设置事务的传播行为、隔离规则、回滚规则、事务超时、是否只读
详细分析参考Spring 事务 – @Transactional的使用
@Aspect
AOP的核心,作用是把当前类表示为一个切面供容器读取。必要时须再加上**@Component**
@Pointcut
JoinPoint的集合,是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发,在程序中主要体现为书写切入点表达式。
Advice(通知、切面): 某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。
- @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
- @After: final增强,不管是抛出异常或者正常退出都会执行.
- @AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
- @AfterThrowing: 异常抛出增强,相当于ThrowsAdvice.
- @Around: 环绕增强,相当于MethodInterceptor.
~待续