有些注解总是忘记含义,特此记录一下
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