spring注解汇总

Spring注解汇总

一、元注解
1、@Documented:表示含有此注解的注解应该被Javadoc工具记录,默认注解是不记录的。

2、@Inherited:表示含有此注解的注解可以被子类继承,只能用在类上。@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

3、@Retention(RUNTIME):表示含有此注解的注解会保留到哪个。 例如:
SOURCE–只在源代码级别保留,编译时就会被忽略。
CLASS–编译时被保留,在class文件中存在,但JVM将会忽略。
RUNTIME–将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

4、@Target({TYPE, METHOD, FIELD, PARAMETER}):表示含有此注解的注解使用范围。

二、Bean类注解
1、@Component:将类标记为一个组件,以Bean的形式注入到Spring容器中。相当于xml配置中的。bean的ID默认为将类名第一个字母变为小写的字符串。

2、@ComponentScan:会默认扫描与配置类相同的包,将扫描到的@Component类自动注入到Spring容器中,免去写@Bean方法。

3、@Autowired:为属性或方法的形参自动注入bean,默认按类型装配,属于Spring的注解。

4、@Resource:为属性或方法的形参自动注入bean,默认按名称装配,若按名称找不到,则切换按类型装配,属于J2EE的注解。也可以写在类上,表示这是一个bean,而@Autowired不能。

Att:@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

5、@Bean:标记此方法返回一个bean,一般用在@Configuration类中。bean的ID默认和带有@Bean注解的方法名是一样的。

6、@Configuration:标记此类为一个配置类,自动将类中的@Bean下的类注入到Spring容器中。

7、@Controller:声明一个controller类bean。(注入service)

8、@Service:声明一个service类bean。(注入dao)

9、@Repository:声明一个dao类bean。(实现数据访问,常与Hibernate使用)

10、@ConditionOnMissingBean:当bean不存在时,才创建bean,常放在@Bean下面

11、@Conditional(xxx.class):指定创建bean的条件类,若条件类的matches()返回true则创建此bean。

12、@Primary:指定那个bean为子类中首选的bean。

13、@Qualifier(xxx):指定bean的别名。

14、@Scope(xxx):指定bean的作用域。一共有单例、原型、会话、请求四种作用域,例

如:@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)。

15、@Mapper:使Mapper类接口与Mapper.xml文件相互映射,实现数据访问功能。例如:WallMapper.java接口和WallMapper.xml相对应,从而实现里面的数据访问方法。(实现数据访问,常与Mybatis使用)

16、@MapperScan(xxx):指定扫描Mapper类接口的包。例如:@MapperScan(“com.dong.mapper”)。

17、@Valid:验证后面的形参是否满足校验类注解的要求。通常用在形参为POJO的对象上。

18、@PathVariable:将URL中占位符参数绑定到控制器处理方法的形参中。例如:URL中的/user/{xxx}通过@PathVariable(“xxx”) 绑定到操作方法的形参中。

19、@Transactional:声明方法或类中的方法以事务的方式运行。

20、@EnableTransactionManagement:开启类以事务方式运行其中的方法。

三、请求类注解
1、@EnableWebMVC:启用MVC。

2、@RequestParam:指定参数的一些属性,比如required(是否必须)、value(对应请求体中的参数)、defaultValue(默认值)。
例如:@RequestParam(value = “age”, required = true, defaultValue = “23”) String userAge。

3、@RequestMapping(xxx):指定访问的路径,可用在方法和类上。可以限制路径、请求类型、接收参数、接收请求头,
例如:
@RequestMapping(value="/login", method=RequestMethod.POST, params=“name”, headers=“Content-Type:text/html;charset=UTF-8”)

value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method: 指定请求的method类型, GET、POST、PUT、DELETE等;

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

4、@GetMapping(xxx):指定接受GET请求及其请求路径。

5、@POSTMapping(xxx):指定接受POST请求及其请求路径。

6、@RequestBody:用来解析content-type不是application/x-www-form-urlcoded类型的请求内容,并自动编码为指定的形参类。

7、@ResponseBody:用于将Controller的方法返回的对象,根据HTTP Request Header的Accept的内容,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时,返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用。

8、@RequestHeader:可将请求头中的属性值绑定到处理方法的形参中。

9、@CookieValue:获取cookie值,有value、required、defaultValue三个参数。

四、资源类注解
1、@Import(xxx.class):指定需要导入的类。

2、@ImportResource(xxx):指定需要导入的文件。

3、@Profile(xxx):指定使用哪个配置文件。

4、@ActiveProfile(xxx):指定运行时需要激活哪一个配置文件。

5、@PropertySource(xxx):隔离加载配置文件。
例如:@PropertySource(“classpath:/com/sound/app/properties”)。

五、辅助类注解
1、@Override:指定此方法被子类重写。加上此注解可以确认方法是否写对,若写错会报错。

2、@SuppressWarnings(xxx):屏蔽某些编译时的警告信息。例如:

@SuppressWarnings(“unused”) 屏蔽方法或对象从未使用的警告。

@SuppressWarnings(“rawtypes”) 屏蔽对象未使用泛型指定类型的警告。

@SuppressWarnings(“deprecation”)屏蔽使用了已过时或者不推荐使用的类或方法时的警告。

@SuppressWarnings(“unchecked”) 屏蔽未执行类型转换检查的警告。

@SuppressWarnings(“fallthrough”) 屏蔽当Switch程序块直接通往下一种情况而没有Break时的警告。

@SuppressWarnings(“path”) 屏蔽在类、源文件等路径中有不存在的路径时的警告。

@SuppressWarnings(“serial”) 屏蔽当在可序列化的类上缺少serialVersionUID定义时的警告。

@SuppressWarnings(“all”) 屏蔽所有情况的警告。

六、测试类注解
1、@RunWith(xxx.class):指定类运行时需要依赖的测试类。

2、@ContextConfiguration(classes=xxx.class):指定需要加载的配置类。

3、@Test:标记测试的方法。

七、切面类注解
1、@AspectJ:标记此类为切面。

2、@Pointcut:声明切点方法。

3、@Before:通过方法会在目标方法调用之前执行。

4、@After:通知方法会在目标方法调用之后执行。

5、@AfterThrowing:通知方法会在目标方法抛出异常后调用。

6、@AfterReturning:通知方法会在目标方法返回后调用。

7、@Around:通知方法会将目标方法封装起来。

8、@EnableAspectJAutoProxy:启用AspectJ自动代理。

八、校验类注解
1、空检查
1)@Null:验证对象是否为null。

2)@NotNull:验证对象是否不为null, 无法查检长度为0的字符串。

3)@NotBlank:检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格。

4)@NotEmpty:检查约束元素是否为NULL或者是EMPTY。

2、Booelan检查
1)@AssertTrue:验证 Boolean 对象是否为 true。

2)@AssertFalse:验证 Boolean 对象是否为 false。

3、长度检查
1)@Size(min=, max=):验证对象(Array,Collection,Map,String)长度是否在给定的范围之内。

2)@Length(min=, max=):验证string的长度是否在给定范围之内。

4、日期检查
1)@Past:验证 Date 和 Calendar 对象是否在当前时间之前。

2)@Future:验证 Date 和 Calendar 对象是否在当前时间之后。

3)@Pattern:验证 String 对象是否符合正则表达式的规则。

5、数值检查
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为"“时无法转换为int,但可以转换为Stirng为”",Integer为null。
1)@Min:验证 Number 和 String 对象是否大等于指定的值 。

2)@Max:验证 Number 和 String 对象是否小等于指定的值 。

3)@DecimalMax:被标注的值必须不大于约束中指定的最大值.这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示。小数存在精度。

4)@DecimalMin:被标注的值必须不小于约束中指定的最小值.这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示。小数存在精度。

5)@Digits:验证 Number 和 String 的构成是否合法 。

6)@Digits(integer=,fraction=)验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。

7)@Range(min=, max=) 检查数字是否介于min和max之间。
例如:@Range(min=10000,max=50000,message=“range.bean.wage”)private BigDecimal wage;

8)@Valid:递归的对关联对象进行校验,如果关联对象是个集合或者数组,那么对其中的元素进行递归校验;如果是一个map,则对其中的值部分进行校验。(是否进行递归验证)

9)@CreditCardNumber:信用卡验证。

10)@Email:验证是否是邮件地址,如果为null,不进行验证,算通过验证。

11)@ScriptAssert(lang= , script=, alias=):验证调用的脚步。

12)@URL(protocol=, host=, port=, regexp=, flags=):验证URL。

1、@RestController和@GetMapping等等注解都是由依赖得到的

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

自定义注解类编写的一些规则:

1、Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口。

2、参数成员只能用public或默认(default)这两个访问权修饰。

3、参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组。

4、要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,因为除此之外没有别的获取注解对象的方法。

5、注解也可以没有定义成员。

att:自定义注解需要使用到元注解

调用isAnnotationPresent(注解.class)方法判断字段上(或方法上)是否有注解,然后通过.getAnnotation(注解.class).value().toString()获取注解的value的值,一般定义注解,我们在springMVC的拦截器中或者SpringAOP中拦截获取注解的值做出相应的处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值