@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}
-
value属性 指定地址,可以指定多个@RequestMapping(value={"/hello","/hi","/greetings"})
-
method属性:指定请求的method类型, GET、POST、PUT、DELETE等;
-
如果前台传的参数名和后台的形参名不一致,可以使用注解@RequestParam(value=“name”,required=true)
String username来映射,指明前台传的哪个参数名,注入到后台哪个形参名,
它还有一个required属性,指明是否一定要传参,默认是true,不需要就的话就设置成false
还有一个defaultValue属性:设置如果前台没有传参我给他设置一个默认的值 -
consumes属性:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
-
produces属性:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
-
params属性:指定request中必须包含某些参数值是,才让该方法处理。
-
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,程序员自己可以决定是否做空指针检查。
后续还会增加。。也可以提示我增加哪些,博客目前只是做一个记录