title: SpringBoot常用注解
date: 2017-07-21 14:17:44
tags: Java
简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,特点在于:
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置
常用注解
@SpringBootApplication 它包括了一下三个注解@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring boot提供了一个统一的注解@SpringBootApplication。
一般用于启动的配置:
@SpringBootApplication
public class MainApplication{
public static void main (String args[]){
SpringApplication.run(Application.class,args);
}
}
其中分别解释上面三个注解:
@Configuration和他的好基友@Bean组成了Spring的一个配置类。
<beans>
<bean id = "car" class="com.test.Car">
<property name="wheel" ref = "wheel"></property>
</bean>
<bean id = "wheel" class="com.test.Wheel"></bean>
</beans>
可以写成
@Configuration
public class Conf {
@Bean
public Car car() {
Car car = new Car();
car.setWheel(wheel());
return car;
}
@Bean
public Wheel wheel() {
return new Wheel();
}
}
@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired() @Qualifier("baseDao")
private BaseDao baseDao;
@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。如:
@Resource(name="baseDao")
private BaseDao baseDao;
@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有“/path”的URL请求。
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。(也就是return的代码返回到页面上)
@RequestMapping(path = {"/", "/index"})
@ResponseBody
public String index(HttpSession httpSession) {
logger.info("VISIT HOME");
return wendaService.getMessage(2) + "Hello NowCoder" + httpSession.getAttribute("msg");
}
@Controller:用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping
@Service:一般用于修饰service层的组件
@PathVariable是用来获得请求url中的动态参数的
在SpringMVC后台控制层获取参数的方式主要有两种,一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取
直接在Controller里面加上用@ExceptionHandler标注一个处理异常的方法,如下面的例子:
@RequestMapping(path = {"/admin"}, method = {RequestMethod.GET})
@ResponseBody
public String admin(@RequestParam("key") String key) {
if ("admin".equals(key)) {
return "hello admin";
}
throw new IllegalArgumentException("参数不对");
}
@ExceptionHandler()
@ResponseBody
public String error(Exception e) {
return "error:" + e.getMessage();
}