Java Spring 常见注解汇总

---------持续更新ing---------

注解和在XML文件中配置是等价

目录:
A @After @AfterReturning @AfterThrowing @ApiOperation @ApiParam @Around @Aspect @AssertFalse @AssertTrue @Async @Autowired
B @Bean @Before
C @Cacheable @CacheEvict @CachePut @Configurable @Configuration @Controller @Component @ComponentScan @CreditCardNumber
D @Data @DecimalMax @DecimalMin @DependsOn @Deprecated @Digits @Document
E @Email @EnableAutoConfiguration @EnableEurekaClient @EnableEurekaServer
F@Future
I @ImportResource @InjectLogger @Inherited
J @JsonBackReference @JsonDeserialize @JsonFormat @JsonIgnore @JsonIgnoreProperties @JsonManagedReference @JsonProperty @JsonPropertyOrder @JsonSerialize @JsonUnwrapped @JsonView
L @Lazy @Length
M @Max @Min @ModelAttribute
N @Name @NotBlank @NotEmpty @NotNull @Null
O @Override
P @Passt @PathVariable @Pattern @PersistenceContext @PersistenceUnit @PostConstruct @PreDestroy @Primary
Q @Range @Qualifier
R @Range @RedisData @Repository @RequestBody @RequestParam @RequestMapping @Resource @ResponseBody @RestController @Retention
S @SafeHtml @ScriptAssert @Scope @Service @Size @SpringBootApplication @SuppressWarnings
T @Target @Transactional
U @URL
V @Value @Valid @Validated
W @WriteDS


元注解:@Retention、@Target、@Document、@Inherited

@Retention 注解的保留位置

@Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Target 设定注解使用范围
Target通过ElementType来指定注解可使用范围的枚举集合

@Document 该注解将会被包含在javadoc中

@Inherited 子类可继承父类的该注解


@Controller 标注控制层组件
如Struts中的action

@Service 标注业务层组件

@Repository 标注数据访问层组件
即DAO层 一般标注在DaoImp实现层

@Component 标注组件
注释在被扫描和装配的类上
泛指的组件,不好归类的时候使用
将POJO实例化到Spring容器中
相当于xml中的

@Configuration 配置文件类
标注在类上,该类是用来配置Spring中Bean的配置文件。取代Beans.xml

@Bean Bean方法
注释在方法上,显示声明
相当于xml文件中的,被注释的方法产生一个Bean交给Spring容器

@RestController 标识一个类是REST风格的控制器类
继承自@Controller,相当于@Controller+@ResponseBody
当返回数据不是html标签页面,而是json、xml等的时候使用

@configurable 对bean进行自动装配
对类进行标注
属性:
autowire

  • @Configurable(autowire=Autowire.BY_TYPE) 按类型自动装配
  • @Configurable(autowire=Autowire.BY_NAME)按名字自动装配

@Autowired 自动装配
对成员变量、方法和构造函数进行标注
默认先byType再byName

@Resource 自动装配
和@Autowired一样,也可对字段或属性进行标注。
默认先byName,若没有则byType
据说byName会更快,因此大项目更推荐用@Resource

@Primary 优先注入
当Spring根据Type等无法确定注入哪个,选择标注了@Primary的

*@EnableAutoConfiguration * 自动装配
官翻:一般在标注在main函数上,会根据已经部署的jar依赖告诉Spring Boot“猜测”你想如何配置Spring

@SpringBootApplication 自动装配
这个就厉害了。相当于@ Configuration+@EnableAutoConfiguration+@ ComponentScan,并具有他们的默认属性。

@ComponentScan 组件扫描
对应于xml中的,可以自动扫描basePackage下面的有@Component、@Controller、@Service标注的类,并注册为bean
一般放在启动类中指明扫描范围
@ComponentScan("包地址")

@Scope 指明Bean的作用域
@Scope(“singleton”),默认,Spring IOC容器只会创建该bean定义的唯一实例。
@Scope(“prototype”),每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作。
@Scope(“request”),表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效。
@Scope(“session”),表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效。
@Scope(“global session”),类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。

@Qualifier 指明被装配者
辅助@Autowired,当装配到同类多个型的bean时,通过@Qualifier("beanId")来指明你需要是具体是哪个

@PostConstruct 生命周期注解
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

@PreDestroy 生命周期注解

被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。
这里写图片描述

@RequestMapping 配置URI映射
参数:
value 请求地址
-普通地址(直接指出,value指出)
-带有变量的地址
-带有正则表达式的地址{变量1:表达式1}.{变量2:表达式2}
method 请求方法 (GET、POST)
consumes 提交内容类型
produces 返回内容类型 -params 请求参数
headers 头

例子:

@Controller
@RequestMapping("/class_uri")	
public class DemoController{

	//直接URI	
	@RequestMapping("/invisiblevalue")	
	public void invisibleValueMethod(){...}	
	
	//value指出URI	
	@RequestMapping(value="/visiblevalue")	
	public void visibleValueMethod(){...}	
	
	//URI带参数
	@RequestMapping(value="/user/{userID}")	
	public void URIWithParams(@PathVariable String userID){...}

	//带正则表达式
	@RequestMapping(value="/{username:[a-z-]+}")	
	public void regularExpression( @PathVariable String username){...}

	//请求方法
	@RequestMapping(value="/{userId}",method=RequestMethod.GET)
	public void requestMethod( @PathVariable String userId){...}
	
	//约束提交内容类型
	//例子为该方法仅处理 提交内容类型为“application/json”类型的请求
	@RequestMapping(value="/user",method=RequestMethod.POST,consumes="application/json")
	public void submitType(@RequestBody User user){...}

	//约束返回内容类型
	//例子为该方法仅处理 返回内容类型为“application/json”类型的请求
	@RequestMapping(value="/user",method=RequestMethod.POST,produces="application/json")
	public void returnType(@RequestBody User user){...}

	//约束请求参数
	//例子表示,请求参数中userID必须为1,userName不能为"jack"
	@RequestMapping(value="/user",method=RequestMethod.GET,params={"userID=1","userName!=jack"})
	public void requestParams(){...}
	
	//约束请求头
	//例子表示,请求头中Refer的值必须为http://www.123.com
	@RequestMapping(value="/user",method=RequestMethod.GET,headers="Refer=hhttp://www.123.com")
	public void requestHeaders(){...}}

@PathVariable 处理参数
处理URL如 localhost:8080/user/1 时的参数

@RequestParam 处理参数
处理URL如 localhost:8080/user?id=1时的参数

@RequestBody 处理请求体
通常用来处理content-type不是默认编码而是application/json类型的请求体
可将字符串自动绑定到相应的bean上,相应的字符串上。

@ResponseBody 处理返回体
通常用来处理json、xml格式的数据。

@ModelAttribute 对象绑定

@Aspect 面向切面编程
Spring AOP 中用来自定义切面

@Before 方法前执行
在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。

@After 方法后执行
当某连接点退出的时候执行的通知(不论是正常返回还是异常退出,类似于finally)。

@AfterReturning 运行方法后执行
在某连接点正常完成后执行的通知

**@AfterThrowing Throw后执行 **
在方法抛出异常退出时执行的通知。

@Around 环绕执行
包围一个连接点的通知,如方法调用。
这是最强大的一种通知类型。
环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。

@Override 重写
可写可不写,帮助检查重写的正确性

@InjectLogger 注入日志

@ImportResource 资源文件读取
注释类
@ImportResource(“配置文件地址”)

@Value 资源属性读取
注释属性
读取资源时候的属性读取
相当于xml中的<property>中的value

@value("${jdbc.url}")
private String url;

相当于xml中的

@Deprecated 废弃
标注该类/接口/方法/字段不再推荐使用
如果被使用,编译器会提示警告信息

@SuppressWarnings 抑制警告
可标注在类/接口/方法/字段前

@SuppressWarnings("警告类型")
@SuppressWarnings(value={"类型1","类型2"})

-all 抑制所有的警告
-boxing 抑制拆箱、装箱有关的警告
-cast 抑制映射相关的警告
-dep-ann 抑制过期注释的警告
-deprecation 抑制过期方法的警告
-fallthrough 抑制在switch语句中缺失breaks的警告
-finally 抑制finally模块没有返回的警告
-hiding 抑制本地隐藏变量的警告
-incomplete-switch 抑制switch语句不完整的警告
-nls 抑制非nls格式的字符串的警告
-null 抑制null分析的警告
-rawtypes 抑制在泛化类参数的时候没有指定相应类型的警告
-restriction 抑制使用了被劝阻的或者被禁止的引用的警告
-serial 抑制在serializable类中没有声明serialVersionUID变量的警告
-static-access 抑制不正确的静态访问方式的警告
-synthetic-access 抑制子类没有按最优方法访问内部类的警告
-unchecked 抑制没有进行类型检查操作的警告
-unqualified-field-access 抑制没有权限访问的域的警告
-unused 抑制没有被使用过的代码的警告

@Transactional 事务管理
只能标注在public方法上,采用Spring事务管理器
若标注在类前,则类中所有方法都讲进行事务处理。

传播行为:@Transactional(propagatio=xxx)

  • REQUIRED :默认,如果有事务则加入,如果没有则新建
  • REQUIRED :默认,如果有事务则加入,如果没有则新建
  • NOT_SUPPORTED:必须在一个已有事务中执行,否则抛异常
  • MANDATORY:必须在一个已有事务中执行,否则抛异常
  • NEVER:必须在没有的事务中执行,否则抛异常(和上面相反)
  • SUPPORTS:当其他bean调用该方法,如果bean中有事务则也用事务,若bean中没有则不用。

超时:@Transactional(timeout=30) //默认是30秒
隔离级别:@Transactional(isolation = Isolation.xxx)

  • READ_UNCOMMITTED:读取未提交数据(会出现脏读, 不可重复读) 基本不使用

  • READ_COMMITTED:读取已提交数据(会出现不可重复读和幻读)

  • REPEATABLE_READ:可重复读(会出现幻读)

  • SERIALIZABLE:串行化

    • MYSQL: 默认为REPEATABLE_READ级别
    • SQLSERVER: 默认为READ_COMMITTED

*@Cacheable * 缓存
被声明方法的返回值应该被缓存

*@CachePut * 缓存
被声明方法的返回值应该被缓存,和Cacheable不同的是,它每次都会出发真实的调用

*@CacheFlush * 清空缓存
声明一个方法是清空缓存的触发器

@RedisData Redis数据
标识Redis缓存数据

 @RedisData(name = "DataName", cluster = "ClusterName")
 private dataType dataName;

@JsonView 过滤序列化对象的字段属性
标注在属性或方法上
可以有选择的序列化对象
http://blog.csdn.net/gefangshuai/article/details/50328361

*@JsonIgnore * 过滤序列化对象的字段属性
标注在属性或方法上
在json序列化时将java bean的一些属性忽略掉
序列化和反序列化都受影响

*@JsonIgnoreProperties * 过滤序列化对象的字段属性
标注在类上
在json序列化时将java bean的一些属性忽略掉
序列化和反序列化都受影响

*@JsonManagedReference * 放在父类中
标注在属性或方法上
可解决对象中存在双向引用导致的无限递归问题

*@JsonBackReference * 放在子类中
标注在属性或方法上
可解决对象中存在双向引用导致的无限递归问题

*@JsonSerialize * 自定义序列化
标注在属性或getter方法上
在序列化时嵌入自定义的代码

@JsonDeserialize 自定义反序列化
标注在属性或setter方法上
在反序列化时嵌入自定义的代码

*@JsonProperty * 属性别名
标注在属性上
将该属性名序列化为另外的别名
反序列化也有用

*@JsonPropertyOrder * 属性排序
标注在类上

*@JsonUnwrapped * 去包装
标注在属性或方法上
将子json对象的属性添加到封闭的json对象中
{“id”:111,“name”:{“firstName”:“张”,“secondName”:“三”}}
加了@JsonUnwrapped后是{“id”:111,“firstName”:“张”,“secondName”:“三”}

*@JsonFormat * json类型格式化
标注在属性或方法上
@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)

@DependsOn 前置依赖
修饰bean活方法
有一些bean需要在本bean初始化前就已经初始化完成,用该注释可强制初始化这些bean
@DependsOn({"beanA","beanB"})

@Lazy 延迟初始化
修饰bean,
所有bean默认lazy是false的,即在IoC容器初始化启动的时候,该bean无论是否被使用到,都进行初始化。
设置了@lazy(true)的bean施行延迟初始化,再第一次被调用的时候才开始实例化

@Async 异步方法调用
修饰方法
这些方法在执行的时候将在独立的线程中执行,调用者无需等待它的完成,即可继续其他的操作

@EnableEurekaClient 注册Eureka客户端
注释在启动类上
Eureka是Netflix的一个开源架构,Eureka客户端用来简化与服务器之间的交互

@EnableEurekaServer 注册Eureka服务器
注释在启动类上
Eureka是Netflix的一个开源架构,Eureka服务器用作服务注册服务器

@Null 为null
修饰任何类型

@NotNull 不能为null
修饰任何类型
不能为null 但可为空,""," "

*@NotEmpty * 不能为空
修饰集合类、字符串
不能为空,长度必须大于0, " "
不能修饰基本类型,不然会报错

javax.validation.UnexpectedTypeException: No validator could be found for

*@NotBlank * 必须有实际字符
修饰String
不能为空,除了空字符,长度必须大于0,"aaa"

@AssertFalse 验证是false
验证布尔类型元素值是false

*@AssertTrue * 验证是true
验证布尔类型元素值是true

@Email 验证元素是emai
验证字符串的值应该是email
可通过正则表达式和flag自定义email格式

@CreditCardNumber 验证元素是信用卡
通过Luhn 算法来验证字符串是否是信用卡数字

@SafeHtml 是否是安全的HTML
检查被注释的是否包含潜在的恶意片段(比如

你可能感兴趣的:(java,spring)