SpringBoot2


SpringBoot2

第一章:

1.1 javaConfig

JavaComfig:使用java类作为xml配置文件的替代,是配置spring容器的纯java方式。在这个java类中可以创建java对象,把对象放入spring容器中(注入)

使用两个注解:

1)@Configuration:放在一个类的上面,表示这个类是作为配置文件使用的

2)@Bean:声名对象,把对象注入到容器中

/**
 * 作用是表示当前类是作为配置文件使用的,就是用来容器的
 *
 *      SpringConfig这个类就相对于beans.xml
 */
@Configuration
public class SpringConfig {

    /**
     * 创建方法,方法的返回值是对象,在方法上面加入@Bean
     * 方法的返回值对象就是注入到容器中。
     *
     * @Bean:把对象注入到spring容器中。作用就是相当于bean标签
     *
     *      说明:@Bean,不指定对象的名称,默认的方法名是 id
     */
    @Bean
    public Student createStudent(){
        Student s1 = new Student();
        s1.setName("张三");
        s1.setAge(18);
        s1.setSex("男");
        return s1;
    }
}

1.2、@importResource

@importResource 作用是导入其他的xml配置文件,等于 在xml

1.3、@PropertyResource

@PropertyResource 是读取 properties 属性配置文件

@Comifguration
@ImportResource(value = {"classpath:applicationContext.xml","classpath:beans.xml"})
@PropertyResource(value = "classpath:com.bjpowernode.vo")
public class SpringConfig{

}

第二章 Spring Boot

2.1、介绍

SpringBoot是Spring中的一个成员,可以简化Spring,SpringMVC的使用。他的核心还是IOC容器。

特点:

  • 创建Spring应用

  • 内嵌的tomcat,jetty,Undertow

  • 提供了starter起步依赖,简化应用的配置。

    • 比如使用MyBatis框架,需要在Spring项目中,配置Mybatis的对象SqlSessionFactory,Dao的代理对象在SpringBoot项目中,在pom.xml里面,加入一个mybatis-spring-boot-starter依赖
  • 尽可能去配置spring的第三方库。叫做自动配置(就是把spring中的,第三方库的对象都创建好,放到容器中,开发人员可以直接使用)

  • 提供了健康检查,统计,外部化配置

  • 不用生成代码,不用xml配置

2.2、注解的使用:

@SpringBootApplication
//复合注解:由
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

//1.@SpringBootConfiguration

@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}


//说明:使用了@SpringBootConfiguration注解标注的类,可以作为配置文件使用的,可以使用@Bean声明对象,注入容器

2.@EnableAutoConfiguration

启用自动配置,把java对象配置好,注入到spring容器中。例如可以把mybatis的对象创建好,放入容器中

3.@ComponentScan

@ComponentScan 扫码器,找到注解,根据注解的功能创建对象,给属性赋值等等
    默认扫码的包:@ComponentScan所在的类的包和子包。

2.3、配置文件

配置文件名称:application

扩展名有:properties(k = v); yml(k: v)

例1:application.properties 设置端口号和上下文

# 设置端口号
server.port=8082
# 设置访问应用上下文路径,contextpath
server.servlet.context-path=/myboot

例2:application.yml

server:
    port: 8083
    servlet:
        context-path: /myboot2

2.4、多环境配置

有开发环境,测试环境,上线环境

每个环境有不同的配置,例如端口,上下文件,数据库url,用户名,密码等等

使用多环境配置文件,可以方便的切换不同的配置。

使用方式:创建多个配置文件,名称规则:appliction-环境名称.properties(yml)

创建开发环境的配置文件:application-dev.properties(application-dev.yml)

创建测试者使用的配置:application-test.properties(application-test.yml)

2.5、使用jsp

SpringBoot不推荐使用jsp,而是使用模板技术代替jsp

使用jsp需要配置:

1)加入一个处理jsp的依赖。负责编译jsp文件

<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  1. ) 创建一个存放jsp的目录,一般叫做webapp

    index.jsp

  2. ) 需要在pom.xml指定jsp文件编译后的存放目录。META-INF/resources

  3. ) 创建Controller,访问jsp

  4. )在application.propertis文件中配置视图解析器

2.6、使用容器

你想通过代码,从容器中获取对象。

通过SpringApplication.run(Application.class,args);返回值获取容器。

public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
        return run(new Class<?>[] { primarySource }, args);
}

ConfigurableApplicationContext:接口,是ApplicationContext的子接口

第三章 Web组件

三个内容:拦截器,Servlet,Filter

3.1、拦截器

拦截器是SpringMvc中的一种对象,能拦截对Controller的请求。

拦截器框架中有系统的拦截器,还可以自定义拦截器。实现对请求预先处理。

实现自定义拦截器:

1、创建类实现SpringMvc框架的Handlerlnterceptor接口

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

2、需在SpringMvc的配置文件中,声明拦截器

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:path="url"/>
        <bean class="拦截器全限定类名称">
    </mvc:interceptor>
</mvc:interceptors>

SpringBoot中注册拦截器:

@Configuration
public class MyAppConfig implements WebMvcConfigurer {

    //添加拦截器对象,注入到容器中
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //创建拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();

        //指定拦截的请求url地址
        String path[] = {"/user/**"};

        //指定不拦截的地址
        String excludePath [] = {"/user/login"};
        registry.addInterceptor(interceptor)
                .addPathPatterns(path)
                .excludePathPatterns(excludePath);
    }
}

3.2、servlet

在SpringBoot框架中使用Servlet对象。

使用步骤:

1.创建Servlet类,创建类继承HttpServlet

2.注册Servlet,让框架能找到Servlet

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //使用HttpServletResponse输出数据,应答结果
        resp.setContentType("test/http;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.println("执行的是Servlet");
        out.flush();
        out.close();
    }
}

3.3、过滤器Filter

Filter是Servlet规范中,可以处理请求,对请求的参数,属性进行调整。常常在过滤器中处理字符编码

在框架中使用过滤器:

  1. 创建自定义过滤器类
  2. 注册Filter过滤器对象

例子:

//自定义过滤器
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行了MyFilter,doFilter");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

注册Filter

@Configuration
public class WebApplicationConfig {

    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new MyFilter());
        bean.addUrlPatterns("/user/*");
        return bean;
    }
}

3.4、字符集过滤器

CharacterEncodingFilter:解决post请求中乱码的问题

在SpringMVC框架中,在web.xml注册过滤器。配置其他的配置

  1. 修改application.properties文件
server.port=9091
server.servlet.context-path=/myboot

#让系统的CharactEncodingFilter生效
server.servlet.enabled.charset=true
#指定使用的编码方式
sercer.servlet.encoding.charset=utf-8
#强制request,response都使用charset属性的值
server.servlet.encoding.force=true

第四章 ORM 操作 Mysql

使用MyBatis框架操作数据,在Springboot框架集成MyBatis

使用步骤:

  1. mybatis起步依赖:完成了mybatis对象自动配置,对象放在容器中

  2. pom.xml 指定把src/main/java目录中的xml文件中包含到classpath中

  3. 创建实体类Student

  4. 创建Dao接口 StudentDao,创建一个查询学生的方法

  5. 创建Dao接口对应得Mapper文件,xml文件,写sql语句

  6. 创建Service层对象,创建StucentService接口和其实现类。去dao对象的方法。完成数据库的操作

  7. 创建Controller对象,访问Service。

  8. 写application.properties文件。

    1. 配置数据库的连接信息。

第一种:@Mapper

@Mapper:放在dao接口的上面,每个接口都需要使用这个注解。

/**
 * @Mapper:告诉NyBatis这是dao接口,创建次接口的代理对象
 */
@Mapper
public interface StudentDao {

    Student selectById(@Param("stuId") Integer id);
}

第二种:@MapperScan

@SpringBootApplication
@MapperScan(basePackages = "com.bjpowernode.dao")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

第三种:Mapper文件和Dao接口分开管理

现在把Mapper文件放在resources目录下

1)在resources目录中创建子目录(自定义的),例如mapper

2)把mapper文件放在mapper目录中

3)在application.properties文件中,指定mapper文件的目录

# 指定mapper文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
# 指定mybatis文件的日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

4)在pom.xml中指定resources目录中的文件,编译到目标目录中

<!-- resources插件    -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>

第四个 事务

Spring框架中的事务:

1)管理事务的对象:事务管理器(接口,接口有很多的实现类)

例如:使用jdbc或mybatis访问数据库,使用的事务管理器:DataSourceTransactionManager

2)声明式事务:在xml配置文件或者使用注解说明事务控制的内容

​ 控制事务:隔离级别,传播行为,超时时间

3)事务的处理方式:

​ 1)spring框架中的@Transactional

​ 2)aspectj框架可以在xml配置文件中,声明事务控制的内容

SpringBoot中使用事务:上面两种方式都可以。

1)在业务方法的上面加入@Transactional,加入注解后,方法有事务功能了。

2)明确的在 主启动类的上面,加入@EnableTransactionManager

/**
 * @Transactional:表示方法的有事务支持
 *         默认:使用的是隔离级别,REQUIRED 传播行为:超过时间  -1
 *
 * @EnableTransactionManagement:启用事务管理器
*/

第五章:接口架构风格 ——RESTful

接口:可以指访问servlet,controller的url,调用其他程序的函数

架构风格:api组织方式(样子)

就是一个传统的:在地址上提供了访问的资源名称addStudent,在其后使用了get方式传递参数

RESTful的架构风格

表现层状态转移:

​ 表示层就是视图层,显示资源的,通过视图页面,jsp等等显示操作资源的结果。

​ 状态:资源变化

​ 转移:资源可以变化的。资源能创建,new状态,资源创建后可以查询资源,能看到资源的内容,这个资源内容,可以被修改,修改后资源和之前的不一样。

2)REST的要素:

用REST表示资源和对资源的操作。在互联网中,表示一个资源或者一个操作。

资源使用url表示的,在互联网,使用的图片,视频,文本,网页等等都是资源。

资源是用名词表示。

对资源:

​ 查询资源:看,通过url找到资源。

​ 创建资源:添加资源

​ 更新资源:编辑

​ 删除资源:去除

资源使用url表示,通过名词表示资源。

在url中,使用名词表示资源,以及访问资源的信息,在url中,使用“/”分隔对资源的信息

http://localhost:8080/myboot/student/1001

使用http中的动作(请求方式),表示对资源的操作(CRUD)

GET:查询操作

POST:创建资源

PUT:更新资源

DELETE:删除资源

3)一句话说明REST:

使用url表示资源,使用http动作操作资源。

4)注解:

@PathVariable:从url中获取数据

@GetMapping:支持的get请求方式,等同于@RequestMapping(method=RequestMethod.GET)

@PostMapping:支持的post请求方式,等同于@RequestMapping(method=RequestMethod.POST)

@PutMapping:支持的put请求方式,等同于@RequestMapping(method=RequestMethod.PUST)

@DeleteMapping:支持的delete请求方式,等同于@RequestMapping(method=RequestMethod.DELETE)

@RestController:复合注解,是@Controller和@ResponseBody组合

表示当前这个类中的所有方法都加入了@ResponseBody

5.2、在页面中或者ajax中,支持put,delete请求

在SpringMVC中有一个过滤器,支持post请求转为put,delete

过滤器:org.springframework.web.filter.HiddenHttpMethodFilter

作用:把请求中的post请求转为put,delete

实现步骤:

  1. application.properties(yml):开启使用HiddenHttpMethodFilter 过滤器
  2. 在请求页面中,包含_method参数,他的值是put,delete,发起这个请求发起的是post方式

文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !
  目录