Spring Boot入门

​ 由于Spring1.0时代都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,相当的繁琐。随着JDK1.5带来的注解支持,Spring2.0可以使用注解对Bean进行申明和注入,大大减少了xml配置文件,同时也大大简化了项目开发。

​ 那么问题来了,是应该使用xml还是注解呢?
1.应用的基本配置使用xml,如数据库,资源文件等
2.业务开发用注解,如Service中注入Bean

1 Spring4.0基于注解形式开发配置

1.1 声明Bean注解

​ @Repository 在数据访问层(dao 层) 类级别声明
​ @Service 在业务逻辑层(Service 层)类级别进行声明
​ @Controller 在展现层(MVC) 使用 标注当前类为一个控制器
​ @Compoment组件 没有明确规定其角色,作用在类级别上声明当前类为一个业务组件,被 Spring Ioc 容器维护

1.2 注入Bean注解

​ @AutoWired Spring 官方提供注解
​ @Inject JSR-330 提供注解(标准制定方)
​ @Resource JSR-250 提供注解

1.3 Spring4.0中配置与获取Bean注解

​ @Configuration 作用在类上,将当前类声明为一个配置类,相当于一个xml配置文件
​ @ComponentScan 自动扫描指定包下标注有@Repositor,@Service,@Controller@Component 注解的类并由 Ioc 容器进行实例化和维护
​ @Bean 作用于方法上,相当于xml文件中声明当前方法返回值为一个bean

1.4 组合注解与元注解

Spring 从 2.x 版本开始引入注解支持(目的是 jdk1.5 中推出注解功能),通过引入注解来消除大量 xml 配置,Spring 引入注解主要用来注入 bean以及 aop 切面相关配置,但由于注解大量使用,就会造成大量重复注解代码出现,代码出现了重复, Spring 为了消除重复注解,在元注解上引入了组合注解,其实可以理解为对代码的重构,相当于注解的注解,拥有元注解的原始功能,比如在定义配置类时用到的@Configuration 注解就是组合注解,拥有Component 注解功能,即配置类本身也是一个被 Ioc 维护的单例 Bean.

2 Spring MVC零配置创建与部署

2.1 pom.xml坐标环境添加

<!-- spring web -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<!-- spring mvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.2.RELEASE</version>
</dependency>
<!-- web servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>
<build>
    <finalName>springmvc</finalName>
    <resources>
        <resource>
        	<directory>src/main/resources</directory>
        </resource>
        <resource>
        	<directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
            <include>**/*.tld</include>
        </includes>
        <filtering>false</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
            <encoding>utf-8</encoding>
        </configuration>
        </plugin>
    </plugins>
</build>	

2.2 控制器添加

@Controller
public class HelloController {
    @RequestMapping("/index")
    public String index(){
    	return "index";
    }
}

2.3视图添加

​ 在 WEB-INF/views 目录下创建 index.jsp(这里以 jsp 为模板)

<html>
    <body>
    	<h2>test web mvc</h2>
    </body>
</html>

2.4 MVC环境配置信息添加

Spring Mvc 配置信息 MvcConfig 文件添加,作为 Mvc 框架环境,原来是通过xml 来进行配置(视图解析器, Json 转换器,文件上传解析器等),这里基于注解通过继承 WebMvcConfigurerAdapter 类 并重写相关方法来进行配置(注意通过@EnableWebMvc 注解来启动 mvc 环境)

/**
* mvc 基本配置
*/
@Configuration
@EnableWebMvc
@ComponentScan("com.shsxt")
public class MvcConfig extends WebMvcConfigurerAdapter{
    // 视图解析器 bean 配置
    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

MvcConfig 类定义好了,那么问题来了,怎么加载 MvcConfig 类呢,原来在构建 Mvc 应用时是通过容器启动应用时加载 web.xml 文件 实现配置文件加载,现在的环境 web.xml 文件不存在,此时基于注解方式构建的 Mvc 应用,定义WebInitializer 实现 WebApplicationInitializer 接口(该接口用来配置Servlet3.0+配置的接口,用于替代 web.xml 配置),当 servlet 容器启动 Mvc应用时会通过 SpringServletContainerInitializer 接口进行加载 从而加载Mvc 应用信息配置。 实现该接口 onStartup 方法 ,加载应用信息配置 。

2.5 应用配置加载接口实现

public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
    // 注册 Mvc 配置信息
    ctx.register(MvcConfig.class);
    // 设置 ServletContext 上下文信息
    ctx.setServletContext(servletContext);
    // 配置转发器 Dispatcher
    ServletRegistration.Dynamic
    servlet=servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));
    servlet.addMapping("/");
    // 启动时即实例化 Bean
    servlet.setLoadOnStartup(1);
    }
}

​ 测试

3 Spring Boot概念介绍以及优缺点

3.1 概念

​ Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式, Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.
​ 随着动态语言流行(Ruby,Scala,NodeJs 等), Java 开发变得相对笨重,配置繁琐,开发效率低下,部署流程复杂,以及第三方集成难度也相对较大,针对该环境, Spring Boot 被开发出来,其使用“习惯大于配置目标” ,借助 Spring Boot 能够让项目快速运行起来,同时借助 Spring Boot 可以快速创建 web 应用并独立进行部署(jar 包 war 包方式,内嵌 servlet 容器),同时借助 SpringBoot 在开发应用时可以不用或很少去进行相关 xml 环境配置,简化了开发,大大提高项目开发效率。

3.2 Spring Boot 特点

​ 创建独立 Spring 应用程序、 嵌入式 Tomcat, Jetty 容器、 无需部署 WAR 包、简化 Maven 及 Gradle 配置、 尽可能的自动化配置 Spring、 直接植入产品环境下的实用功能,比如度量指标、健康检查及扩展配置、 无需代码生成及 XML 配置等Spring Boot 不止对 web 应用程序做了简化,还提供一系列的依赖包来把其它一些工作做成开箱即用。

3.3Spring Boot快速上手

​ 环境:JDK1.8,Spring Boot1.5.x, idea ,maven

1) 设置Spring Boot的parent
<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 包含了大量默认的配置, 简化程序的开发。

2)导入Spring Boot的web支持
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>	

3)添加Spring Boot的插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <encoding>utf-8</encoding>
    </configuration>
</plugin>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

4)添加Controller

@Controller
public class HelloController {
    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
    	return "hello Spring Boot";
	}
}

5)启动程序

​ 在Controller层所在包下创建StarterApplication.java

@SpringBootApplication
public class StarterApplication{
    public static void main(String[] args) {
    	SpringApplication.run(Starter.class);
    }
}

​ 启动测试,直接运行 main 方法即可 通过浏览器访问资源

4 Spring Boot核心

4.1 入口类与@SpringBootApplication注解

​ @SpringBootApplication 注解是 Spring Boot 的核心注解,它其实是一个组合注解 从源码定义来看, SpringBootApplication 注解组合了@SpringBootConfiguration 、 @EnableAutoConfiguration 、 @ComponentScan注解

​ @SpringBootConfiguratio也是一个组合注解,组合了@Configuration 注解,对于 SpringBoot 应用, @SpringBootConfiguration 注解属于 Boot 项目的配置注解也是属于一个组合注解, Spring Boot 项目中推荐使用@SpringBootConfiguration 注解,因为其包含了@Configuration 注解!!!

​ @EnableAutoConfiguration注解组合了@AutoConfigurationPackage、 @Import注解,使用该注解,代表 Spring Boot 应用在启动后默认启用自动配置,比如项目中引入了 SpringMvc 环境,需要加入 @EnableMvc 注解,如果声明该@EnableAutoConfiguration,启用过程由应用程序自动配置,我们仅需要引入相关依赖即可达到目的。

​ @ComponentScan 组件扫描注解, 如果没有进行配置,默认扫描@SpringBootApplication 所在类的同级目录以
及所在子目录!

4.2Spring Boot配置文件

​ Spring Boot 默认会读取全局配置文件,文件名为 application.properties或 application.yml 文件,放置在 src/main/resources 目录或类路径 config下, 由于开发中以 properties 配置文件为主, 这里配置以 proerties 文件为主
讲解,yml 文件属于 spring boot 引入的一种新的配置文件,具有面向对象特性。

​ 在 resources 资源目录下添加 application.properties 文件配置信息如下:

## 项目启动端口号配置
server.port=8989
## 项目访问上下文路径
server.servlet-path=/mvc

## 日志信息打印配置
logging.pattern.level=debug
logging.pattern.console=%d [%t] %-5p [%c] - %m%n

## jdbc 连接数据库 基本配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/hr?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

4.3 Starter pom

​ 通过使用 Spring Boot ,简化了企业级开发大部分场景的 start pom 只要使用的相应场景的start pom ,对于相关配置就可以消除 ,通过 Spring Boot 就可以得到自动配置的 Bean,相关 start pom 如下

https://blog.csdn.net/csdnluolei/article/details/83409535

4.4 xml配置

​ Spring Boot 中项目提倡零配置, 但在实际项目中,可能有一些特殊要求需要提供相关xml 配置文件来简化项目开发,此时可以通过 Spring 中提供的@ImportResource 注解来加载配置文件。

@SpringBootApplication
@ImportResource{"classpath:test01.xml","classpath:test02.xml"}

5 项目打包部署

​ 打包命令

clean compile package -Dmaven.test.skip=true

6 Spring Boot 中拦截器、消息转换器、文件上传的配置

6.1拦截器配置

​ 在 SpringMvc 应用中通过定义拦截器,可以实现对应用中指定资源进行访问控 制 目 的 ( 用 户 非 法 资 源 请 求 拦 截 等 操 作 ) , 实 现 方 式 可 以 通 过 继 承HandlerInterceptorAdptor 或者实现 HandlerInterceptor 接口 并在 xml 中进行配置来生效拦截器。 同样道理,在 Spring Boot 应用中拦截器实现同样也是继承 HandlerInterceptorAdptor 或实现 HandlerInterceptor 接口方式,生效时将对应 Bean 加入配置项中即可!

LoginInterceptor 代码准备

public class LoginInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse
        response, Object handler) throws Exception {
        System.out.println("拦截器方法被执行。 。。 ");
        return true;
    }
}

配置拦截器生效

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter{
    // 配置登录拦截器 bean
    @Bean
        public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }
    // 重写拦截器添加方法 将登录拦截器加入 mvc 环境
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 指定拦截资源 与放行资源
        registry.addInterceptor(loginInterceptor()).addPathPatterns("/**").excludePa
        thPatterns("/login","/exit");
    }
}

6.2 消息转换器配置

​ 设置消息编码格式为 utf-8

@Bean
public StringHttpMessageConverter stringHttpMessageConverter(){
	return new StringHttpMessageConverter(Charset.forName("utf-8"));
}

6.3 文件上传配置

文件上传 UploadController 代码添加

@Controller
public class UploadController {
    @RequestMapping("uploadFile")
    public ModelAndView uploadFile(HttpServletRequest request){
        ModelAndView mv=new ModelAndView("result");
        MultipartHttpServletRequest mhsr=(MultipartHttpServletRequest)request;
        MultipartFile mf= mhsr.getFile("file");
        try {
        	if(null!=mf&&!mf.isEmpty()){
        		Stringpath=request.getSession().getServletContext().getRealPath("/WEBINF/upload");
                 String fileName= mf.getOriginalFilename();
                 File file=new File(path,fileName);
                 mf.transferTo(file);
                 mv.addObject("msg", "文件上传成功!");
             }
        } catch (Exception e) {
            e.printStackTrace();
            mv.addObject("msg", "文件上传失败!");
        }
        return mv;
    }
}

文件上传全局配置

## 文件上传配置
spring.http.multipart.maxFileSize=10Mb
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值