Spring注解

注:Spring注解使用的地方分为:类、属性、方法、参数


  •  上面添加的注解 

① @Component不推荐使用

解释:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注把普通pojo实例化到spring容器中,相当于xml配置文件中的<bean id="" class=""/>

② @Service

解释:用于在业务逻辑层(BaseService.java)组件上添加的注解,想要获取此实例默认通过类名小写,还可以自己可定义,比如:@Service(“BaseService”’)

③ @Controller

解释:用于在控制层(BaseController.java)组件上添加的注解

④ @Repository

解释:用于Dao层实现组件,即Dao层的实现类上面添加的注解

⑤ @Scope

解释:在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工作

比如:

在java中:

在XML中:

1、singleton:单例,即容器里只有一个实例对象。

2、prototype:多对象,每一次请求都会产生一个新的bean实例,Spring不无法对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,由程序员负责销毁该对象,不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用

3、request:对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

4、Session:作用于一次会话,一次会话内有效

@RequestMapping

解释:处理映射请求的注解。用于类上,也可以用在方法上,加在类上表示类中的所有响应请求的方法都是以该地址作为父路径。有6个属性

value:指定请求的实际地址

A) 可以指定为普通的具体值;如@RequestMapping(value ="/testValid")

B)  可以指定为含有某变量的一类值;如@RequestMapping(value="/test/{day}")

C)  可以指定为含正则表达式的一类值;如@RequestMapping(value="/{textualPart:[a-z-]+}.{numericPart:[\\d]+}")  可以匹配../liminbo.122912请求。

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

例:

2、consumes: 指定处理请求的提交内容类型(Content-Type)

例如:

@RequestMapping(value = "/test",consumes="application/json")处理application/json内容类型

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

   例:

@RequestMapping(value = "/test", produces = "application/xml");

@RequestMapping(value = "/test", produces = "application/json");

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

   例:

@RequestMapping(value = "/test"params="name=zhangsan"

即:仅处理请求中包含了名为“name”,值为“zhangsan”的请求.

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

   例:

@RequestMapping(value = "/test"method = RequestMethod.GET, headers="Host=www.baidu.com")

另: @GetMapping(value = "page")等价于@RequestMapping(value = "page", method = RequestMethod.GET)

   @PostMapping(value = "page")等价于@RequestMapping(value = "page", method = RequestMethod.POST)

@ResponseStatus

解释:@ResponseStatus用于修饰一个类或者一个方法,修饰一个类的时候,一般修饰的是一个异常类,当处理器的方法被调用时,@ResponseStatus指定的code和reason会被返回给前端。value属性是http状态码,比如404,500等。reason是错误信息

   例:

@ResponseStatus(value=HttpStatus.FORBIDDEN, reason="出现了错误")

public class UserException extends RuntimeException{

XXX

};

总结:Spring提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应持久化层Bean,业务层Bean,和控制层Bean,这些注解与@Component的语义是一样的,完全通用,在Spring以后的版本中可能会给它们追加更多的语义。所以,我们推荐使用@Repository、@Service、@Controller来替代@Component。


  • 方法上面添加的注解

@RequestMapping(上面已讲解)

@ResponseBody

解释:将方法返回的数据转换成json格式并响应给客户端.

@Transactional

解释:用于该注解的方法会被spring aop加入事务管理,即该方法中如果出现异常呢么方法中进行的

数据操作全部回滚.

:使用该注解首先要在 xml 配置中的事务配置信息:

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>


  • 参数上面添加的注解

@RequestBody

解释:将客户端发送的json格式数据和java对象、基本数据、数组集合等进行绑定,只接收post请求中的数据

   例:

@RequestParam

解释:作用是提取和解析请求中的参数。@RequestParam支持类型转换,类型转换目前支持所有的基本Java类型

@RequestParam(value=”number ”)  String number

将请求中参数为number映射到方法的number上。required=false表示该参数不是必需的,请求上可带可不带。

   例:

@PathVariable

解释:处理请求 url部分,当使用@RequestMapping 样式映射时,即@RequestMapping(“test/{paramId}”), 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上

  例:

 

请求地址:http://xxx/delete/3

@RequestHeader

解释:将请求头信息绑定到方法参数上

  例:

 

@CookieValue

解释:将cookie里一些值绑定到方法参数上

  例:


  • 属性上面添加的注解

@Autowired

解释:自动注入,将用此注解的属性注入到当前类中,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。

@Resource

解释:默认按 byName自动注入,如果找不到再按byType找bean,如果还是找不到则抛异常,无论按byName还是byType如果找到多个,则抛异常。

可以手动指定bean,它有2个属性分别是name和type,使用name属性,则使用byName的自动注入,而使用type属性时则使用byType自动注入。

例:

@Resource(name=”bean名字”)

@Resource(type=”bean的class”)

@Qualifier

解释:使用@Autowired 时,如果找到多个同一类型的bean,则会抛异常,此时可以使用 @Qualifier("beanName"),明确指定bean的名称进行注入,此时与 @Resource指定name属性作用相同。

  例:

@Value

解释:为了简化从properties里取配置,可以使用@Value, 可以properties文件中的配置值。

  例:

⑤@DateTimeFormat

解释:可以将页面传过来的 String类型转换为 Date 类型。具体使用:直接在成员变量上加入注解就可以了,同时还可以指定 format 的格式.

  例:


  • 如何自定义注解

元注解:元注解是指注解的注解

例:

@Retention:注解所保留的级别

@Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含

@Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Target:注解的作用目标

@Target(ElementType.TYPE)   //接口、类、枚举、注解

@Target(ElementType.FIELD) //字段、枚举的常量

@Target(ElementType.METHOD) //方法

@Target(ElementType.PARAMETER) //方法参数

@Target(ElementType.CONSTRUCTOR)  //构造函数

@Target(ElementType.LOCAL_VARIABLE)//局部变量

@Target(ElementType.ANNOTATION_TYPE)//注解

@Target(ElementType.PACKAGE) //   

@Document:一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中 

@Inherited:说明子类可以继承父类中的该注解

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾尽一世殇梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值