> ### `@Component`
* 作用在类上,默认为`singleton`
* 被`@Component`注解标注的类会被Spring扫描并注册为`Bean`
* `@Component`使用在不确定哪一个层的时候使用,可以作用在任何层次,把普通`pojo`实例化到`spring`容器
<br/>
> ### `@Service`
* `@Service`是`@Component`注解的一个特例,作用在类上,默认为`singleton`
* `@Service`用于标注业务层组件,表示定义一个`bean`
<br/>
> ### `@Scope`
* `@Scope`作用在类上和方法上,用来配置 `spring bean` 的作用域
* `singleton`单例模式
* `prototype`原型模式
* `request`模式,只适用于Web程序,每一次HTTP请求都会产生一个新的bean
* `session`模式,只适用于Web程序,session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
<br/>
> ### `@Repository`
* `@Repository`注解作用在类上,默认为singleton,用于标注数据访问组件,即DAO组件
* `@Repository`注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型
<br/>
> ### `@Controller`
* `@Controller`注解作用在类上,用于标注Web中控制层组件
* 被`@Controller`标注的类负责处理由`DispatcherServlet`分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个`Model `,然后再把该`Model`返回给对应的`View`进行展示
* `@Controller`和`@RequestMapping`、`@RequestParam`等一些注解共同处理URL的映射
<br/>
> ### `@RequestMapping`
* `@RequestMapping`注解作用在类或方法上,用来处理请求地址映射,有7个属性
* `value`和`path`熟悉指定请求的实际地址,如:`@RequestMapping("/test")`,`@RequestMapping(path="/test/*.do")`
* `method`属性,表示请求类型:` GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE`,另外,Spring Boot也提供了简化版后的`@RequestMapping`,如`@GetMapping`,`@PostMapping`
* `consumes`,指定处理允许的媒体类型,例如`application/json`, `text/html`
* `produces`,指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
```
// 仅处理request请求中Accept头中包含了"text/plain"的请求,同时暗示了返回的内容类型为text/plain
@RequestMapping(value="/test", products="text/plain")
@RequestMapping(value="/test", produces={"text/plain", "application/*"})
```
* `params`,指定request中必须包含的请求参数,才会进入此方法
```
// 仅处理请求中包含了名为“action”,值为“query”的请求
@RequestMapping(value = "/test", params="action=query")
```
* `headers`,指定请求中必须包含的请求头,才能进入此方法
* `@RequestMapping`请求路径匹配
* 符号 * 匹配任一字符
* 符号 ** 匹配任意路径
* 符号 ? 匹配单个字符
* 如果一个请求有多个@Requestmapping能够匹配,通过匹配更具体的方法处理此请求
* `@RequestMapping`方法参数
* @PathVariable - 将URL中的值映射到方法参数中
* Model - Spring MVC中通用的模型
* JavaBean - 将HTTP参数映射到JavaBean对象
* MultipartFile - 用于处理文件上传
<br/>
> ### `@ResponseBody`
* `@ResponseBody`注解直接将返回的对象输出到客户端
* 如果返回字符串,直接返回;如果返回不是字符串,默认使用Jackson将对象序列化成JSON字符串后输出
<br/>
> ### `@RestController`
* `@RestController = @Controller + @ResponseBody`,直接将返回的对象输出到客户端
<br/>
> ### `@AutoWired`
* `byType`方式,自动注入`bean`,当加上(`required=false`)时,就算找不到bean也不报错
* `@Qualifier`,配合`@AutoWired`使用,当`bean`有多个实现类时,可用该注解指定其中的一个,如:`@Qualifier("apple")`
<br/>
> ### `@Transactional `
* 在应用系统调用声明了`@Transactional`的目标方法时,`Spring Framework`默认使用 AOP 代理,在代码运行时生成一个代理对象,根据`@Transactional`的属性配置信息,这个代理对象决定该声明`@Transactional`的目标方法是否由拦截器`TransactionInterceptor`来使用拦截,在`TransactionInterceptor`拦截时,会在目标方法开始执行之前创建并加入事务,并执行目标方法的逻辑, 最后根据执行情况是否出现异常,利用抽象事务管理器`AbstractPlatformTransactionManager`操作数据源`DataSource`提交或回滚事务。
* `readOnly`,否为只读事务,设置为true表示只读,false则表示可读写,默认值为false
* `propagation`,设置事务的传播行为
* `isolation`,设置底层数据库的事务隔离级别
* `timeout`,设置事务的超时秒数,默认值为-1表示永不超时
* `rollbackFor`,需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。
* `rollbackForClassName`,设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。
* `noRollbackFor`,设置不需要进行回滚的异常类数组
* `noRollbackForClassName`,设置不需要进行回滚的异常类名称数组
- asD
- Java
- Java基础
- Java编译器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞队列
- java语法
- String.format()
- JVM
- JVM内存、对象、类
- JVM GC
- JVM监控
- 多线程
- 基础概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 线程池
- Spring
- IOC
- 特性介绍
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring处理请求的过程
- 注解
- 微服务
- 服务注册与发现
- etcd
- zk
- 大数据
- Java_spark
- 基础知识
- Thrift
- hdfs
- 计算机网络
- OSI七层模型
- HTTP
- SSL
- 数据库
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 数据结构/算法
- 排序算法
- 快排
- 插入排序
- 归并排序
- 堆排序
- 计算时间复杂度
- leetcode
- LRU缓存
- B/B+ 树
- 跳跃表
- 设计模式
- 单例模式
- 装饰者模式
- 工厂模式
- 运维
- git
- 前端
- thymeleaf
- 其他
- 代码规范
- work_project
- Interview