spring学习----注解描述

有些注解总是忘记含义,特此记录一下

java注解

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) Java的元注解(指修饰注解的注解)之一。用来指定注解修饰类的哪个成员

@Retention(RetentionPolicy.RUNTIME)

注解按生命周期来划分可分为3类:

  • RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
  • RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
  • RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

这3个生命周期分别对应于:Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
生命周期长度 SOURCE < CLASS < RUNTIME

@Documented 表明这个注解应该被 javadoc工具记录

@Inherited 允许子类继承父类的注解

@Override 方法重写

spring其它注解

@Bean(修饰方法)

@Bean明确地指示了一种方法,产生一个bean的方法,并且交给Spring容器管理

注册bean注解

@Component , @Repository , @ Controller , @Service 这些注解都是把你要实例化的对象转化成一个Bean,放在IoC容器中
@Configration 声明当前类是个配置类,相当于一个Spring配置的xml文件

使用bean注解

@Autowired
默认按类型装配,这个注解是属业spring的,默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如@Qualifier(“testService”)

@Resource 如@Resource(name=”baseDao”)
这个注解属于J2EE的,默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配

spring-cloud注解

@EnableEurekaServer

该注解表明应用为eureka服务,有可以联合多个服务作为集群,对外提供服务注册以及发现功能

@EnableDiscoveryClient @EnableEurekaClient 服务发现

SpringCLoud中的“Discovery Service”有多种实现,比如:eureka, consul, zookeeper。

  • @EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现;
  • @EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;

@LoadBalanced负载

@EnableConfigServer开启配置中心

@EnableZuulProxy开启zuul

@EnableFeignClients

spring-boot注解

@SpringBootApplication

springboot开启自动配置注解,包含
@ComponentScan
@Configuration
@EnableAutoConfiguration

其中实现自动配置的核心注解为@EnableAutoConfiguration引入
@Import({EnableAutoConfigurationImportSelector.class}),使用SpringFactoriesLoader.loadFacrotyNames扫描META-INF/spring.factories 实现,根据条件注解自动装配

@Conditional

条件注解,列举部分
@ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)

spring处理http请求

请求

@Controller

处理http请求,如果不使用@ResponseBody,需要配合模版视图使用

常用模版引擎
1,FreeMarker
2,Groovy
3,Thymeleaf (Spring 官网使用这个)
4,Velocity
5,JSP
常用的 3、4

@RestController

等价于 @Controller + @ResponseBody 返回值为json

@RequestMapping(value = “/ribbon-consumer”,method = RequestMethod.GET)

url映射配置,可修饰类、方法

@GetMapping 等价于 @RequestMapping(method = RequestMethod.GET) 下面注解同理
@PostMapping
@PutMapping
@DeleteMapping

参数

handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类

  • 处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:
    @PathVariable;
  • 处理request header部分的注解: @RequestHeader, @CookieValue;
  • 处理request body部分的注解:@RequestParam, @RequestBody;
  • 处理attribute类型是注解: @SessionAttributes, @ModelAttribute;

@PathVariable

把URI template 中变量 的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable(“name”)指定uri template中的名称。

如:
@RequestMapping(“/pets/{petId}”)  
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      
    // implementation omitted  
  }  

@RequestHeader @CookieValue

RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上
CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上

@RequestMapping(“/displayHeaderInfo.do”)  
public void displayHeaderInfo(@RequestHeader(“Accept-Encoding”) String encoding,  
                              @RequestHeader(“Keep-Alive”) long keepAlive,
                              @CookieValue(“JSESSIONID”) String cookie)  {  
 //TODO
}  

@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用来指示参数是否必须绑定;
    注意:multipart/form-data 各个表单项之间用boundary隔开,用request.getParameter是取不到数据的,这时需要通过request.getInputStream来取数据,不过取到的是个InputStream,一般使用组件如:apache的fileupload组件

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

@SessionAttributes @ModelAttribute (个人使用不多,一般直接使用Model直接传值到前端)

@SessionAttributes用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用
@ModelAttribute


  • 用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
  • 用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;

要绑定的值来源于:
A) @SessionAttributes 启用的attribute 对象上;
B) @ModelAttribute 用于方法上时指定的model对象;
C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。
参考资料
http://blog.csdn.net/ye1992/article/details/49588261
https://www.cnblogs.com/bossen/p/5824067.html
http://bhdweb.iteye.com/blog/1663907
http://blog.csdn.net/github_35180164/article/details/52118286

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值