注解介绍
注解有两个作用:标注和注入
- 标注:类路径下自动扫描,减少在xml中配置bean,例如@Component,@Service
- 注入:自动装配,需要类的地方直接加注解就可以引入该类;例如:@Autowired
- 在spring中开启注解:
<context:compnnent-scan base-package="...">
指定扫描路径 - spring生成的注解有默认名字,为类名的首字母小写形式,如果要指定自定义的需要类似@Service(“xxx”)来指定
- Spring中的bean,默认是singleton,即生成的对象是全局单例的,如果要改,需要@scope(“prototype”)指明,scope可以选择:singleton、prototype、request、session、global session;
- 可以用ApplicationContext.getBean(“zoo”),来获取Zoo.java类
常见注解分类
Spring中有如下几种分类:
- Spring原生:Required、Autowired、value、Qualifier、Component及其扩展的Repository、Service、Controller
- JSR-250:Resource、PostConstruct、Predestroy
- JSR-330:inject、Named、Qualifier
- JPA注解:PersistentContext、PersistenceUnit
- Springmvc注解:RequstBody、RequastParam、ResponseBody,ResponseParam,Pathvariable,ModelAttribute;
常用注解
- Component:标注组件,与持久层的Repository、业务层的Service、控制层的Controller功能一样,加上注解可以让Spring找到相应的类,在对组件不好分类的时候,用Component注解来标识;
- Autowired:是Spring的注解,自动注入类,需要Spring去配置文件中找(或者上下文找标注过的类)相应的Bean,如果找不到会报错,可以用@Autowired(required=false)来设置找不到不报错,返回null
- Resource:与Autowired功能相似,默认通过name来匹配,是J2EE的注解,可以指定按照type来匹配@Resource(type=xxx.class)
Springmvc注解
- ResponseBody:使用在方法上,返回json格式的数据,直接输入到Http response body中;
- RequestBody:使用在参数前,标注对象,Spring完成对象-协议之间的转化,解析post data body,然后绑定到相应的bean上;支持application/json或者application/xml协议格式;与ResponseBody一样,是由HandlerAdapter配置的HttpMessageConverter在对象和协议之间转化的;
- RequstParam:获取参数,对于简单类型的绑定,对应的content-type为application/x-www-form-urlencoded,即form表单提交的数据;
- PathVariable:接收路径参数
5.RestController:是Controller和Response两个注解的组合; - ModelAttribute:渲染model,model可以看做是一个map,改注解的作用是用来传递和保存数据,可以使用在方法上和参数上;
- 使用在方法上,则这个方法在@RequestMapping方法调用之前,在model中填充属性,例如填充下拉列表,用来在request的model里put(“小写开头的类名”,类名),该model就是标注方法的返回值;
- 使用在参数上,数据绑定,将相应名称的值绑定到注解的参数bean上,绑定源查找顺序:SessionAttribute注解、ModelAttribute注解、new一个新的实例;
- HttpEntity,除了能获得request和response之外,能访问请求和响应头,使用getHeaders和getBody()