久闻Spring Boot大名,这两天终于得空,学习了一把,发觉Spring Boot确实好用,那Spring Boot究竟是什么,又是怎么好用呢?java
目前ssm框架仍是比较经常使用的,其中的ss指的无非就是Spring 和 SpringMVC,咱们能够简单的认为 "Spring Boot ≥ Spring + SpringMVC",没错,用了Spring Boot中涵盖了Spring和SpringMVC等大量经常使用开发配置,并且Spring Boot的配置极其简单,可让你不用或者只须要不多的Spring配置就可让你的项目快速运行起来。web
上面已经提到了,使用Spring Boot,可让你不用或者只须要不多的Spring配置就可让你的项目快速运行起来,说的就是使用代码注解来取代xml配置。其实从Spring3.x开始就已经提供了java配置方式,使用java配置方式能够更好的理解你配置的Bean,而现在的Spring4.x更是推荐java配置方式,java配置方式能够彻底替代xml配置,下面就先来看看两个最基本的注释:spring
Spring的java配置方式是经过@Configuration 和 @Bean这两个注释实现的:数据库
该示例将经过java配置方式配置Spring,实现Spring IOC功能。springboot
这是一个简单的模拟从数据库获取User数据的Dao类(注意,它并无使用任何注解,也就是说UserDao目前并无交给Spring容器管理)。app
public class UserDao { public List<String> queryUserList() { List<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add("User " + i); } return list; } }
这是一个最最多见的Service,经过注入UserDao,使用UserDao的方法获取用户数据。框架
@Service public class UserService { @Autowired UserDao userDao; public void getUserList() { List<String> list = userDao.queryUserList(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
从这里开始就跟以往的Spring开发不同了,这个类使用了2个新的注解,其中@Configuration代表该至关于Spring的一个xml配置文件,@Bean将一开始的UserDao配置给Spring管理.maven
@Configuration// 经过注解来代表该类是一个Spring的配置,至关于一个xml文件 public class SpringConfig { @Bean// 这里要注意,方法名"getUserDao"将做为UserDao在容器中的id public UserDao getUserDao() { return new UserDao(); } }
接下来就是获取Spring容器,从容器中拿到UserService,并调用其获取用户数据的方法,代码以下:spring-boot
public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = (UserService) acac.getBean("userService"); userService.getUserList(); } }
像普通的java程序同样,直接运行Test类中的main方法便可在控制台看到用户数据输出了。学习
细心的你应该发现了,以往获取Spring容器使用到的类要么是ClassPathXmlApplicationContext 或是 FileSystemXmlApplicationContext,但Spring Boot使用的倒是AnnotationConfigApplicationContext,缘由也好理解,由于咱们Spring Boot使用的是java配置的方式,而以往使用的是Spring的xml配置方式.
经过上面的示例,咱们已经知道了java配置方式是怎么回事了,那接下来便正式开始使用Spring Boot来开发咱们的第一个web应用了.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent>
说明:Spring boot的项目必需要将parent设置为spring boot的parent,该parent包含了大量默认的配置,大大简化了咱们的开发。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
经过上面简单的3步配置,Spring Boot就配置完毕了,相比以往的Spring、SpringMVC配置是否是要简洁的多呢?
@SpringBootApplication// Spring Boot项目的核心注解,主要目的是开启自动配置 @Controller//标明这是一个SpringMVC的Controller控制器 public class HelloApplication { @RequestMapping("/hello") @ResponseBody public String hello() { return "hello world"; } // 在main方法中启动一个应用,即:这个应用的入口 public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } }
通常Spring Boot的Web应用都有一个xxxApplication类,并使用@SpringBootApplication注解标记,做为该web应用的加载入口。此外,还须要在main方法中(能够是任意一个类)使用SpringApplication.run(xxxApplication.class, args)来启动该web应用。
运行HelloApplication中的main()方法,启动该web应用后,在地址栏输入"http://localhost:8080/hello",就能够看到输出结果了。
若是你项目中没有其余配置,那在运行这个简单的项目时通常是不会报错的,但若是很不幸你第一次运行就报错的话,也不用着急,大部分问题百度便可,本人在启动项目过程当中遇到就"Cannot determine embedded database driver class for database type NONE"这样的错误,这样就记录一下,报错截图以下:
缘由是:springboot启动时会自动注入数据源和配置jpa。
解决方法:在@SpringBootApplication中排除其注入
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
因此,上面的代码修改以下便可:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) @Controller public class HelloApplication { ... }
到这里是否是已经大概感受到了Spring Boot的高效和简洁了呢?配置就是如此简单,功能就是如此强大,但经过上面一系列的讲解,你是否是也产生一些疑惑呢,好比:
不急,后续文章将会对这些问题一一解释清楚。