Spring 注解

@Controller

@Component扩展,使用在一个类上,标记为控制器类。当spring容器通过controller去加载控制器类。一般通过congtroller方法上去映射http请求。

@Service (注入service)

用于标注服务层(业务层),主要用来进行业务的逻辑处理。@Component扩展,被@Service注解的POJO类表示Service层实现,从而见到该注解就想到Service层实现,使用方式和@Component相同;
@service("XXX) 定义一个bean,XXX为定义bean的名字,如果不填value,spring默认生成的bean为类名,首字母小写。

@Repository (实现dao访问)

用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件。@Component扩展,被@Repository注解的POJO类表示DAO层实现,从而见到该注解就想到DAO层实现,使用方式和@Component相同;

@Autowired(spring容器内bean的自动注入)

实用理解:实现属性bean的自动注入。

简单理解:

@Autowired 是通过属性类型注入 及接口实现类注入,只能有一个实现类。

@Autowried @Qualifie(bean名字) 两者结合起来可以根据名字和类型注入

该注解可以对类成员变量、setter方法和构造函数进行注解,完成自动装配工作。自动装配的意思是spring在上下文中找到对应bean的引用,并将它注入到对应的bean中。

@Resource JRS-250提供

@Resource 默认根据名字注入,其次按照类型搜索

该注解定义类中属性,该属性是一个已经存在的bean。注解存在两个属性type和name,默认通过bean名字匹配,如果不存在则通过类型去匹配。进行两次匹配,速度下降。

如果存在多个同一类型的bean可以通过下面两种方式来实现:

(1).通过@Qualifier(bean的名字),与@Autowired一起注解在bean上。
(2)替换使用@Resource注解指定注入特定name的bean.

@RequestMapping

使用此注解去映射http请求和处理器。通过定义不同的映射规则来说明控制器可以处理哪些请求。同时也可以是用在class上,起到指定该控制器类所有请求的前缀。(类上前缀+方法上的映射规则构成完整的http请求映射地址)

restful 风格传参 @RequestMapping(value=“feed/{type}”) 注解获取参数 @PathVariable(value=“type”) Long id
可以使用feed/{handle}/{id}

  1. value属性 指定地址,可以指定多个@RequestMapping(value={"/hello","/hi","/greetings"})

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

  3. 如果前台传的参数名和后台的形参名不一致,可以使用注解@RequestParam(value=“name”,required=true)
    String username来映射,指明前台传的哪个参数名,注入到后台哪个形参名,
    它还有一个required属性,指明是否一定要传参,默认是true,不需要就的话就设置成false
    还有一个defaultValue属性:设置如果前台没有传参我给他设置一个默认的值

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

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

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

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

@ResquestBody

处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded和application/octet-stream编码格式的数据。

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type(“application/json或者application/xml”),SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

用于将Controller中方法返回的对象,通过适当的HttpMessageConverter转换为指定格式的数据,如:json、xml等,然后通过Response响应给客户端。
具体使用场景:

根据request header中的Content-Type和被RequestBody注解的参数不同可以出现几种情况:

1.Content-Type为application/json 
   
参数为JavaBean:可实现json反序列化为JavaBean,使用的HttpMessageConverter为 MappingJackson2HttpMessageConverter

参数为String:简单将字符串赋值给参数,使用的HttpMessageConverter为 StringHttpMessageConverter

2.Content-Type为application/xml
      
参数为JavaBean:可实现xml反序列化为JavaBean,使用的HttpMessageConverter为 Jaxb2RootElementHttpMessageConverter

参数为String:简单将字符串赋值给参数,使用的HttpMessageConverter为 StringHttpMessageConverter

3.Content-Type为application/x-www-form-urlencoded

参数为String:简单将字符串赋值给参数,使用的HttpMessageConverter为 StringHttpMessageConverter

HttpMessageConverter接口:实现消息的转化,根据Request对象header部分的ContentType类型和被注解参数类型,逐一匹配合适的HttpMessageConverter来读取数据;

使用 <mvc:annotation-driven />标签配置时,默认配置了RequestMappingHandlerAdapter,并为他配置了一下默认的HttpMessageConverter:
	1. ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
	2. StringHttpMessageConverter:负责读取字符串格式的数据和写出二进制格式的数据;
	3. ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据; 
	4. FormHttpMessageConverter:负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
	5. MappingJacksonHttpMessageConverter: 负责读取和写入json格式的数据;
	6. SouceHttpMessageConverter:负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
	7. Jaxb2RootElementHttpMessageConverter:负责读取和写入xml 标签格式的数据;
	8. AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
	9. RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据;

流程图
@RequestBody需要依赖jackjson

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.11</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.11</version>
</dependency>

@RequestParam

  • 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( 由String到 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。

  • 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定。
    该注解处理简单的数据参数绑定。用@RequestParam绑定HttpServletRequest请求参数到控制器方法参数。

@ResponseBody

该注解是将返回数据直接添加到http响应body(reaponseBody)中,一般在异步获取数据中使用。http请求通过@RequestMapping找到请求适配器对应的方法,然后返回对应的跳抓路径,使用该注解后不会跳转而是直接写入HTTP正文中返回。可以直接返回一个实体,前端接收时为实体json格式的字符串。
用于将controller返回对象通过HttoMessageConverter转化为适当的格式:json\xml.然后写入response对象的body中,通过Resonse响应给前端。使用该注解后不会进入视图解析器,会直接写入数据流,他的效果等同于直接通过response对象输出指定格式数据。

示例:

@RequestMapping("/login")

@ResponseBody

public User login(User user){

    return user;

 }

那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

等价于:
 @RequestMapping("/login")
 public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());

@Override

@Override是伪代码,表示重写(当然不写也可以),不过也有好处:

         (1)可以当注释用,方便阅读;

         (2)编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。

例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。

@Bean 和@Configuration一起来定义

@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名.
@Bean的方式实现配置,可以完全替代XML的方式定义。

  • 1.@Configuration等同于beans
  • 2.@Bean等同于bean
  • 3.通过AnnotationConfigApplicationContext来加载JavaConfig
    点击进入@Bean注解可以查看其他属性:initMethod destroyMethod
  • 1.name属性等同于的name
  • 2.initMethod属性等同于的init-method,当获取bean的时候init()方法被执行,此方法在构造方法之前执行。
  • 3.destroyMethod属性等同于的destroy-method,在容器被销毁的时候,执行了destroy()方法
  • 4.scope这个比较奇怪,不属于@Bean的参数,这是一个单独的注解,singleton/prototype

@NotNull 和 @Nullable

@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的,就是检验是否可以为空。如果可以传入NULL值,则标记为@Nullable,如果不可以,则标注为@Nonnull。这两个注解可以在代码中做标记使用,看到@NotNull和@Nullable,程序员自己可以决定是否做空指针检查。

后续还会增加。。也可以提示我增加哪些,博客目前只是做一个记录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值