声明 bean 的注解
controller 层
1、@Controller 表明这个类是一个控制器类,和 @RequestMapping 来配合使用拦截请求,如果不在 method 中注明请求的方式,默认是拦截 get 和 post 请求。这样请求会完成后转向一个视图解析器。但是在大多微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回 json 数据的话,需要配合 @ResponseBody 注解来完成。
@RestController 是 @Controller 和 @ResponseBody 的结合,一个类被加上 @RestController 注解,数据接口中就不再需要添加 @ResponseBody。更加简洁。
2、@CrossOrigin:@CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个 controller 配置启用跨域,也可以在方法级别启用。
我们在项目中使用这个注解是为了解决微服在做定时任务调度编排的时候,会访问不同的 spider 节点而出现跨域问题。
3、@Autowired:这是个最熟悉的注解,是 spring 的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从 bean 工厂中获取一个 bean 时,Spring 会自动为我们装配该 bean 中标记为 @Autowired 的元素。
4、@EnablCaching@EnableCaching: 这个注解是 spring framework 中的注解驱动的缓存管理功能。自 spring 版本 3.1 起加入了该注解。其作用相当于 spring 配置文件中的 cache manager 标签。
5、@PathVariable:路径变量注解,@RequestMapping 中用{}来定义 url 部分的变量名。
servcie 层注解
1、@Service:这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给 spring 容器。事务的切面也会配置在这一层。当让 这个注解不是一定要用。有个泛指组件的注解,当我们不能确定具体作用的时候 可以用泛指组件的注解托付给 spring 容器。
2、@Resource:@Resource 和 @Autowired 一样都可以用来装配 bean,都可以标注字段上,或者方法上。 @resource 注解不是 spring 提供的,是属于 J2EE 规范的注解。
dao层注解
@Repository:@Repository 注解类作为 DAO 对象,管理操作数据库的对象。
总得来看,@Component, @Service, @Controller, @Repository 是 spring 注解,注解后可以被 spring 框架所扫描并注入到 spring 容器来进行管理
@Component 是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。
在正常开发中,如果能用 @Service, @Controller, @Repository 其中一个标注这个类的定位的时候,就不要用 @Component 来标注。
2、@Transactional: 通过这个注解可以声明事务,可以添加在类上或者方法上。
在 spring boot 中 不用再单独配置事务管理,一般情况是我们会在 servcie 层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在 public 方法上。并且主要事务切面的回滚条件。正常我们配置 rollbackfor exception 时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。
Spring系列注解
| @AutoWired | 自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错 |
|---|---|
| @Bean | 用@Bean标注方法等价于XML中配置的bean,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理 |
| @Controller | 用于定义控制器类 |
| @CrossOrigin | @CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个 controller 配置启用跨域,也可以在方法级别启用 |
| @Component | 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注 |
| @Configuration | 声明一个类作为配置类,代替xml文件 |
| @ComponentScan | 表示该类自动发现扫描组件。如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。当使用@ComponentScan注解搜索beans,结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类 |
| @EnableAutoConfiguration | SpringBoot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置Spring应用 |
| @Inject | 等价于默认的@Autowired,只是没有required属性 |
| @Import | 用来导入其他配置类 |
| @ImportResource | 用来加载xml配置文件 |
| @JsonBackReference | 解决嵌套外链问题 |
| @Order | 利用@Order控制配置类的加载顺序 |
| @PathVariable | 获取参数 |
| @PathVariable | 路径变量。参数与大括号里的名字一样要相同 |
| @PropertySource | 读取外部配置文件 |
| @Profile | 根据环境,动态激活、切换组件 |
| @Qualifier | 当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者 |
| @RequestParam | 用在方法的参数前面,用以绑定请参数 |
| @Resource(type=”type”) | 没有括号内内容的话,默认byName。与@Autowired干类似的事。 |
| @Repository | 可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项 |
| @RestController | 用于标注控制层组件,是@ResponseBody和@Controller的合集 |
| @ResponseBody | 返回结果不会被解析为跳转路径,而是直接写入HTTP response body中 |
| @RequestMapping | 提供路由信息,负责URL到Controller中的具体函数的映射 |
| @Service | 用于修饰service层的组件 |
| @SpringBootApplication | 申明让spring boot自动给程序进行必要的配置,这个配置等同于:@SpringBootConfiguration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置 |
| @Transactional | 通过这个注解可以声明事务,可以添加在类上或者方法上 |
| @Value | 注入Spring boot application.properties配置的属性的值 |
| @mapper | mybatis 组件的一个注解,通过此注解指定 mybatis 接口类的路径,即可完成对 mybatis 接口的扫描。加在每一个 mapper 接口类上面 |
| @MapperScan | spring-boot 支持 mybatis 组件的一个注解,通过此注解指定 mybatis 接口类的路径,即可完成对 mybatis 接口的扫描。和 @mapper 注解是一样的作用 |
数据库实体相关注解
当你在执行各种持久化方法的时候,实体的状态会随之改变,状态的改变会引发不同的生命周期事件。这些事件可以使用不同的注释符来指示发生时的回调函数:
@javax.persistence.PostLoad:加载后。
@javax.persistence.PrePersist:持久化前。
@javax.persistence.PostPersist:持久化后。
@javax.persistence.PreUpdate:更新前。
@javax.persistence.PostUpdate:更新后。
@javax.persistence.PreRemove:删除前。
@javax.persistence.PostRemove:删除后。
数据库查询
@PostLoad事件在下列情况下触发:
执行EntityManager.find()或getreference()方法载入一个实体后 执行JPQL查询后 EntityManager.refresh()方法被调用后
数据库插入
@PrePersist和@PostPersist事件在实体对象插入到数据库的过程中发生:
@PrePersist事件在调用persist()方法后立刻发生,此时的数据还没有真正插入进数据库
@PostPersist事件在数据已经插入进数据库后发生
数据库更新
@PreUpdate和@PostUpdate事件的触发由更新实体引起:
@PreUpdate事件在实体的状态同步到数据库之前触发,此时的数据还没有真正更新到数据库。
@PostUpdate事件在实体的状态同步到数据库之后触发,同步在事务提交时发生
数据库删除
@PreRemove和@PostRemove事件的触发由删除实体引起:
@PreRemove事件在实体从数据库删除之前触发,即在调用remove()方法删除时发生,此时的数据还没有真正从数据库中删除。
@PostRemove事件在实体从数据库中删除后触发。
@Bean的属性支持
@Scope 设置Spring容器创建Bean实例的类型(方法上,和@Bean一起使用)
prototype:多实例的,ioc容器启动并不会去调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象。
**singleton:单实例的,ioc容器启动会调用方法创建对象放到ioc容器中,以后每次获取就是直接从容器中拿 **(map.get())。
request:同一次请求创建一个实例。
session:同一个session创建一个实例。
@RequestMapping
@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有/path的URL请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:
- params: 指定request中必须包含某些参数值是,才让该方法处理。
- headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
- value: 指定请求的实际地址,指定的地址可以是URI Template 模式
- method: 指定请求的method类型, GET、POST、PUT、DELETE等
- consumes: 指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
- produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回



