@SpringBootApplication

核心注解。包括**@Configuration@EnableAutoConfiguration@ComponentScan**。

@Configuration

从spring3.0开始用于定义配置类,可替换xml配置文件,该类中包含被@Bean注解的方法, 这些方法将会被AnnotationConfigApplicationContextAnnotationConfigWebApplicationContext类进行扫描,并用于构建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
@MapperScan(basePackages={"com.yeding.dao"})

在启动类使用该注解后无需在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
2
3
4
5
6
GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value = "type", required = false) String type ) {
...
}

如果我们请求的 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在特定的切入点上执行的增强处理。

  1. @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
  2. @Afterfinal增强,不管是抛出异常或者正常退出都会执行.
  3. @AfterReturning: 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
  4. @AfterThrowing: 异常抛出增强,相当于ThrowsAdvice.
  5. @Around: 环绕增强,相当于MethodInterceptor.

~待续