久聞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的高效和簡潔了呢?配置就是如此簡單,功能就是如此強大,但經過上面一系列的講解,你是否是也產生一些疑惑呢,好比:
不急,後續文章將會對這些問題一一解釋清楚。