由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试springboot的项目搭建,接下来,和大家分享一下初识springboot后对springboot的理解以及springboot的搭建过程
一.什么是springboot?为什么要使用springboot?
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。在我看来,
springboot就是spring以及springmvc的衍生,是“懒人工具包”
spring boot只是一个配置工具,整合工具,辅助工具.
springboot 最大化的实现了convention over configuration(约定大于配置)
Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop. ioc提供了依赖注入的容器, aop解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。
Spring MVC是基于Servlet 的一个 MVC 框架主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。
说得更简便一些:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot。
总结一下springboot的优点:
(1). 遵循"约定优于配置"原则,使用Spirng Boot只需很少的配置,大部分时候可以使用默认配置;
(2) 项目快速搭建,另外还可以无配置整合第三方框架;
(3) 简化Maven及Gradle配置
(4) 内嵌入Servlet如Tomcat、jetty容器,应用可用jar包运行(java -jar);
(5) 可完全不使用xml配置,只使用自动配置和Java Config;
(6) 有多种强大的开发包,支持热启动
spring-boot-starter-web:支持全栈web开发,里面包括了Tomcat和Spring-webmvc。
spring-boot-starter-mail:提供对javax.mail的支持.
spring-boot-starter-ws: 提供对Spring Web Services的支持
spring-boot-starter-test:提供对常用测试框架的支持,包括JUnit,Hamcrest以及Mockito等。
spring-boot-starter-actuator:支持产品环境下的一些功能,比如指标度量及监控等。
spring-boot-starter-jetty:支持jetty容器。
spring-boot-starter-log4j:引入默认的log框架(logback)
了解了springboot的概念和优势之后,让我们来试一下如何在短短几分钟内搭建springboot项目
二. springboot项目搭建
1.新建maven应用(在idea下新建maven应用)
2.新建maven应用之后,开始配置pom.xml然后import。
在pom中添加以下配置
1 <!-- Spring boot 父引用-->
2 <parent>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-parent</artifactId>
5 <version>1.4.0.RELEASE</version>
6 </parent>
7
8 <!-- Spring boot 核心web-->
9 <dependencies>
10 <dependency>
11 <groupId>org.springframework.boot</groupId>
12 <artifactId>spring-boot-starter-web</artifactId>
13 </dependency>
14 </dependencies>
3. 然后我们新建controller
UserController
@RestController
public class UserController {
//日志
private final Logger log = LoggerFactory.getLogger(UserController.class);
@Autowired//自动注入,可以直接省略掉set和get,它会帮我们set和get
private UserService userService;
@RequestMapping("/getUser")
public User getUser() {
return userService.getUser();
}
@RequestMapping(value="/addUser")
public int addUser() {
List<User> users = new ArrayList<User>();
User user = new User();
user.setId(2);
user.setPassword("32131");
user.setUsername("萨达");
users.add(user);
log.info("我的用户名是"+user.getUsername()+"我的密码是"+user.getPassword());
return userService.addUserWithBackId(users);
}
}
这里我的接口调用了service和数据库,大家在写这个controller的时候先随便返回一下,如system.out等。
4.我们在包的最外层增加新的应用启动入口 —> Application
/** * @EnableAutoConfiguration:spring boot的注解,一般只用于主类, * 是无xml配置启动的关键部分,明确指定了扫描包的路径为其修饰的主类的包(这也就是为什么主类要放在根包路径下的原因) * * @ComponentScan 进行包的扫描,扫描路径由@EnableAutoConfiguration指定了 * * 主类要位于根包路径下,方便之后的扫描(We generally recommend that you locate your main application class in a root package above other classes.) * 主类要位于根包路径下(例如,com.xxx.firstboot),这是推荐做法,方便扫描 每一个jar(即每一个子项目)都要有一个主方法,用于启动该jar(也就是一个微服务) 在主类上添加注解@SpringBootApplication,该注解相当于添加了如下三个注解 @Configuration:该注解指明该类由spring容器管理 @EnableAutoConfiguration:该注解是无xml配置启动的关键部分 @ComponentScan:该注解指定扫描包(如果主类不是位于根路径下,这里需要指定扫描路径),类似于spring的包扫描注解 */ //same as @Configuration+@EnableAutoConfiguration+@ComponentScan @SpringBootApplication(exclude={DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
关于@SpringBootApplication注解的用法在注释中有说明
此时,项目的结构如图所示:
启动应用后访问http://localhost:8080/get
{"id":1,"username":"yangheng","password":"123"}
到此,基本的springboot框架就算搭建完成了。