Java注解
1.注意事项
XML与注解比较
- XML可以适用任何场景 ,结构清晰,维护方便
- 注解不是自己提供的类使用不了,开发简单方便
xml与注解整合开发 :推荐最佳实践
- xml管理Bean
- 注解完成属性注入
- 使用过程中, 可以不用扫描,扫描是为了类上的注解
使用注解必须进行注解驱动注册,从而使注解生效
<context:annotation-scan base-package="com.pojo"/>
<context:annotation-config/>
2.常用注解
Spring注解
-
@Autowired: 自动装配,默认按类型装配,先byType,然后byName
- @Qualifier:当有多个id不同的相同的bean时,需要使用@Qualifier(value=" * ")注解
- @Autowired(required=false) 说明:false,对象可以为null;true,对象必须存对象,不能为null。
-
@Resource : 自动装配,先byName,然后byType
-
@Value : 给属性注入值
-
@Component : 组件,放在一个类上,就说明这个类被spring管理了,就是Bean!
- @Component三个衍生注解:
- @Controller:web层
- @Service:service层
- @Repository:dao层
为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。
写上这些注解,就相当于将这个类交给Spring管理装配了!
- @Component三个衍生注解:
-
@scope : 作用范围
- singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。
- prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收
- Java方式配置
- @Component : 将这个类标注为Spring的一个组件,放到容器中!
- @Configuration : 代表这是一个配置类,相当于Bean.xml
- @ComponentScan("") : 指定扫描哪个包
- @Import("") : 导入合并其他配置类,类似于配置文件中的 inculde 标签
Spring MVC注解
-
@Controller : 主要负责处理前端控制器(DispatcherServlet )发过来的请求,经过业务逻辑层处理之后封装层一个model,并将其返回给view进行展示
-
@RestController : 作用在类上,表示这个类所有方法都加上 @ResponseBody 注解
-
@ResponseBody 注解是将返回的数据结构转换为 JSON 格式,
-
所以说可以这么理解:@RestController = @Controller + @ResponseBody ,省了很多事,我们使用 @RestController 之后就不需要再使用 @Controller 了
-
-
@RequestMapping : 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;方法的级别上注解表示进一步指定到处理方法的映射关系。
该注解有6个属性,一般在项目中比较常用的有三个属性:value、method 和 produces。
- value 属性:指定请求的实际地址,value 可以省略不写;
- method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET。
- 四种不同的请求方式,都有相应的注解。不用每次在 @RequestMapping 注解中加 method 属性来指定,上面的 GET 方式请求可以直接使用 @GetMapping("/get") 注解,效果一样。
- 相应地,PUT 方式、POST 方式和 DELETE 方式对应的注解分别为 @PutMapping、@PostMapping 和 DeleteMapping。
- produces 属性:指定返回内容类型,如 produces = “application/json; charset=UTF-8”。
-
@PathVariable : 主要用来获取 URL 参数,Spring Boot 支持 Restfull 风格的 URL,比如一个 GET 请求携带一个参数 id,我们将 id 作为参数接收,可以使用 @PathVariable 注解
-
@RequestParam : 也是获取请求参数的
- @PathValiable 是从 URL 模板中获取参数值
- @RequestParam 是从 Request 里获取参数值
-
@RequestBody : 用于接收前端传来的实体,接收参数也是对应的实体,比如前端通过 JSON 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。