spring boot常用注解

Spring Boot 常用注解

常见注解

1. @SpringBootApplication 申明让spring boot自动给程序进行必要的配置, 
等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan

2. @Configuration 相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文) 
凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时, 
获取到系统环境变量和application配置文件中的变量

3. @EnableScheduling 在 Spring Boot 的配置类中,标注上这个注解,就可以对项目中的方法某些方法使用@Schedule注解,将其变为定时自动执行。 
但只有两种注解共同使用时,才能达到本注解应有的作用。

4. @Qualifier 限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

5. @ImportResource 用来加载xml配置文件。

6. @Autowired 自动导入依赖的bean

7. @RestController 返回json字符串的数据,直接可以编写RESTFul的接口

8. @ComponentScan 表示将该类自动发现(扫描)并注册为Bean,可以自动收集所有的Spring组件, 
包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。 
如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

9. @ServletComponentScan spring能够扫描到自己编写的servlet和filter, 
SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener, 
可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码

10. @Import({DynamicDataSourceRegister.class}) 注册动态多数据源

11. @PropertySource(value = “classpath:spring/config.properties”) 
通过@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值, 
参数是properties文件中定义的key值。上面是读取一个配置文件,如果你想要读取多个配置文件,请看下面代码片段 
@PropertySource(value = {“classpath:spring/config.properties”,”classpath:spring/news.properties”})

12. @EnableWebSocketMessageBroker 表示开启使用STOMP协议来传输基于代理的消息,Broker就是代理的意思。

13. @Repository 
@Repository、@Service、@Controller,它们分别对应存储层 Bean,业务层 Bean,和展示层 Bean,将类标识为 Bean; 
分别用于软件系统的不同层次: 
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。 
@Service 通常作用在业务层,但是目前该功能与 @Component 相同。 
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。 
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象, 
并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这三个注解除了作用于不同软件层次的类, 
其使用方式与 @Repository 是完全相同的。

14. @Value(“${spring.datasource.url}”) 获取 application 配置文件中的变量

15. @ConfigurationProperties 读取application属性配置文件中的属性

16. @ControllerAdvice 全局异常处理类,以将对于控制器的全局配置放在同一个位置。 

· 注解了@Controller的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。

· ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上

· ExceptionHandler:用于全局处理控制器里的异常。

· InitBinder:用来设置WebDataBinder,用于自动绑定前台请求参数到Model中。

· ModelAttribute:本来作用是绑定键值对到Model中,此处让全局的@RequestMapping都能获得在此处设置的键值对。

17. @WebFilter 将一个实现了javax.servlet.Filter接口的类定义为过滤器 

· 属性filterName声明过滤器的名称,可选

· 属性urlPatterns指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)

18. @Service 

· 声明类是一个 bean,其他的类才可以使用 @Autowired 将其作为一个成员变量自动注入

· Zoo.java 在 bean 中的 id 是 “zoo”,即类名且首字母小写

19. @Scope(“prototype”) Spring默认产生的bean是单例的,”prototype” 表示原型即每次都会new一个新的出来

20. @Bean标注在方法上(返回某个实例的方法),作用为注册bean对象 

· @Bean注解在返回实例的方法上,如果未通过@Bean指定bean的名称,则默认与标注的方法名相同;

· @Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;

· 既然@Bean的作用是注册bean对象,那么完全可以使用@Component、@Controller、@Service、@Ripository等 
注解注册bean,当然需要配置@ComponentScan注解进行自动扫描。

RestController 相关

1. @RestController 返回json字符串的数据,直接可以编写RESTFul的接口,@ResponseBody和@Controller的合集

2. @PathVariable 当使用@RequestMapping URI template 样式映射时,即 someUrl/{paramId}, 
这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上

3. @RequestHeader 可以把Request请求header部分的值绑定到方法的参数上如(@RequestHeader("Accept-Encoding") String encoding){}

4. @CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上如(@CookieValue("JSESSIONID") String cookie){}

5. @RequestParam 

· 常用来处理简单类型的绑定,通过 Request.getParameter() 获取的String可直接转换为简单类型的情况 
String–> 简单类型的转换操作由ConversionService配置的转换器来完成); 
因为使用request.getParameter()方式获取参数,所 以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

· 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

· 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

6. @RequestBody 通过使用HandlerAdapter默认配置的HttpMessageConverters来解析Request请求的Body部分数据并将相应的数据绑定到Controller中方法的参数上,其常用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等。 

· 它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

· 因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用。

7. @SessionAttributes 用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。 
该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象

8. @ModelAttribute 该注解有两个用法,一个是用于方法上,一个是用于参数上: 

· 用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;

· 用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于: 

· @SessionAttributes 启用的attribute 对象上;

· @ModelAttribute 用于方法上时指定的model对象;

· 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中, 
这种方式实际的效果就是在调用@RequestMapping的方法之前,为request对象的model里put(“account”, Account)

9. @Controller 用于定义控制器类,控制器负责将用户发来的URL请求转发到对应的服务接口(service层), 
一般这个注解在类中,通常方法需要配合注解@RequestMapping

JPA 相关

1. @Entity 注释声明该类为持久类,最好实现序列化,此时,默认情况下,所有的类属性都为映射到数据表的持久性字段

2. @Table(name=”“,catalog=”“,schema=”“) 持久性映射的表,通常和@Entity 配合使用,只能标注在实体的 class 定义处, 
表示实体对应的数据库表的信息。 

· name - 可选,表示表的名称,默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名

· catalog - 可选,表示Catalog名称,默认为 Catalog(“”).

· schema - 可选 , 表示 Schema 名称 , 默认为Schema(“”).

3. @Id 注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。

4. @GeneratedValue 定义自动增长的主键的生成策略.

5. @Transient 将忽略这些字段和属性,不用持久化到数据库.

6. @Temporal(TemporalType.TIMESTAMP) 声明时间格式

7. @Enumerated 声明枚举

8. @Version 声明添加对乐观锁定的支持

9. @OneToOne 可以建立实体bean之间的一对一的关联

10. @OneToMany 可以建立实体bean之间的一对多的关联

11. @ManyToOne 可以建立实体bean之间的多对一的关联

12. @ManyToMany 可以建立实体bean之间的多对多的关联

13. @Formula 一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)

14. @OrderBy Many端某个字段排序(List)

15. @Column注解设置,包含的设置如下 

· name:字段名

· unique:是否唯一

· nullable:是否可以为空

· inserttable:是否可以插入

· updateable:是否可以更新

· columnDefinition: 定义建表时创建此列的DDL

· secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。

16. @JoinColumn(name = “”, referencedColumnName = “”) 设置对应数据表的列名和引用的数据表的列名

17. @Lob 注解属性将被持久化为 Blog 或 Clob 类型,根据get方法的返回值不同,自动进行Clob和Blob的转换。 
因为这两种类型的数据一般占用的内存空间比较大,所以通常使用延迟加载的方式,与@Basic标记同时使用,设置加载方式为FetchType.LAZY。 

· Clob(Character Large Ojects)类型是长字符串类型,具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 Clob 类型。

· Blob(Binary Large Objects)类型是字节类型,具体的java.sql.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob 类型。

18. @Basic 
实体Bean中所有的非Static 非transient的属性都可以被持久化,没有定义注解属性的等价于在其上添加了@Basic注解。 
通过@Basic注解可以声明属性的获取策略(lazy与否),默认的是即时获取(early fetch)。 
通常不需要对简单属性设置延迟获取,如需要定义@Basic(fetch=FetchType.LAZY) 
MySQL中没有Clob,用Text代替了,而且分为了tinytext, text,mediumtext,longtext。Blob也按这种方式分成了四种。

19. @Transactional注解 

· rollbackFor 表示当该方法中抛出指定的异常时数据回滚

· dontRollbackOn 表示当该方法中抛出指定的异常时数据不回滚

hibernate-validator

1. @size (min=3, max=20, message=”用户名长度只能在3-20之间”)

2. @size (min=6, max=20, message=”密码长度只能在6-20之间”)

3. @pattern (regexp=”[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,4}”, message=”邮件格式错误”)

4. @Length(min = 5, max = 20, message = “用户名长度必须位于5到20之间”)

5. @Email(message = “比如输入正确的邮箱”)

6. @NotNull(message = “用户名称不能为空”)

7. @Max(value = 100, message = “年龄不能大于100岁”)

8. @Min(value= 18 ,message= “必须年满18岁!” )

9. @AssertTrue(message = “bln4 must is true”)

10. @AssertFalse(message = “blnf must is falase”)

11. @DecimalMax(value=”100”,message=”decim最大值是100”)

12. @DecimalMin(value=”100”,message=”decim最小值是100”)

13. @NotNull(message = “身份证不能为空”)

14. @Pattern(regexp=”^(\d{18,18}|\d{15,15}|(\d{17,17}[x|X]))$”, message=”身份证格式错误”)

@Service VS @Bean 和 @Configuration

@Service实际上表示了DDD中的无状态的,独立的,以接口的形式提供的一个操作。采用@Bean和@Configuration配合的方式,Bean的创建交给了单独的类,而Service的标识给了Java中的Interface以及类的名字。这点在Spring Data也有所体现,比如Repository就是通过名字来标识,如CrudRepository。因此Service也通过名字来体现。具体层次定义,通过名字而不依赖Spring提供的注解,便于根据项目提供更多的层次,比如Mapper层,Validator层等。另外,本身Bean和Service就是两个维度的概念。一个关于具体实现,另一个关于DDD中的概念。使用@Bean的方式,能够创建库里面的类的实例。如果使用@Service的方式,没办法在库里面对应的类上添加@Service注解。

@Resource、@Autowired、@Qualifier 区别

@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的: 
1. @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入; 
2. @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用; 
3. @Resource注解是又J2EE提供,而@Autowired是由Spring提供,故减少系统对spring的依赖建议使用@Resource的方式; 
4. @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上

 

  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值