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>
) 创建一个存放jsp的目录,一般叫做webapp
index.jsp
) 需要在pom.xml指定jsp文件编译后的存放目录。META-INF/resources
) 创建Controller,访问jsp
)在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规范中,可以处理请求,对请求的参数,属性进行调整。常常在过滤器中处理字符编码
在框架中使用过滤器:
- 创建自定义过滤器类
- 注册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注册过滤器。配置其他的配置
- 修改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
使用步骤:
mybatis起步依赖:完成了mybatis对象自动配置,对象放在容器中
pom.xml 指定把src/main/java目录中的xml文件中包含到classpath中
创建实体类Student
创建Dao接口 StudentDao,创建一个查询学生的方法
创建Dao接口对应得Mapper文件,xml文件,写sql语句
创建Service层对象,创建StucentService接口和其实现类。去dao对象的方法。完成数据库的操作
创建Controller对象,访问Service。
写application.properties文件。
- 配置数据库的连接信息。
第一种:@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
实现步骤:
- application.properties(yml):开启使用HiddenHttpMethodFilter 过滤器
- 在请求页面中,包含_method参数,他的值是put,delete,发起这个请求发起的是post方式