Spring的Bean:
标签基本配置
范围配置:
singleton和prototype的创建对象时机不同!!!
Bean实例化的三种方法:
=================================================
依赖注入:
只是一种简便写法
实际中运用的最多的还是子标签<property> </property> 来进行依赖注入,看着更加的直观。
构造方法的注入:
创建一个有参构造,把需要注入的类作为参数,然后在spring的xml配置文件里面,把被需要注入的类用<construct-arg></construct-arg>子标签添加到被注入的bean下。
Bean的依赖注入的数据类型:
import引入xml文件(分模块开发)
重点配置:
Spring相关API:
getBean的两种使用方法:
如果Spring容器内一个类型的对象有多个的情况下,还是需要用id这种唯一标识来区分。
如果一个类型的对象只在容器内被创建了一个,那么就可以用字节码来getBean。
=================================================
Spring配置数据源:
Spring的原始配置:
关于对象的依赖注入的注解使用
Spring新注解:
Spring继承Junit步骤:
Spring集成web环境:
如何将代码中反复创建application对象,从容器中获取bean的这两行代码给优化掉。避免每个方法当中都需要写这两行代码。
Spring提供获取应用上下文的工具:
Spring MVC简介:
SpringMVC快速入门的步骤:
Spring执行流程:
SpringMVC@RequestMapping注解的一些参数和使用:
spring-mvc.xml的组件扫描:
可以直接用单标签扫描某个包,也可以用include-filter去指定某个注解或其他的。
spring-mvc.xml内配置内部资源视图解析器:
=================================================
SpringMVC的数据响应:
返回ModelAndView对象
可以单独的设置Model或者是View。 进行数据传输和页面的跳转。
直接将方法里的return,当作数据返回到页面上。如果不加这个注解,那么springMVC会去找return字符串名称的jsp页面。
通过配置,可以直接return对象,SpringMVC会通过Handler Adapter里的messageConverts里配置的MappingJackson2HttpMessagecConverter自动转换。
注册一个注解驱动,就会自动的帮你实现上一步的那些繁琐的配置 !!!(相当重要,在创建了Spring-mvc配置文件之后,首先就得写这句话)
=================================================
获得请求参数:
基本类型参数:
POJO类型参数:
数组类型参数:
集合类型参数:(较为复杂) :
第一个场景:
借助一个VO对象来进行封装。
第二个场景:
在提交数据的时候,设置contentType去在请求头中就告知服务器用json格式去处理数据。
静态资源权限的开放:
配置servlet处理器,因为SpringMVC都经过DispatcherServlet来进行处理,又都被设置处理为了/,就导致jsp页面它找不到js文件。就需要进行这样的配置,意思就是当DispatcherServlet处理不了的时候,就使用默认的处理。
请求数据乱码的问题:
之前都是需要request.setCharacter Encoding方法来配置请求数据的类型。
现在配置一个filter就可以实现解耦合。在处理请求数据的时候就不用处理中文乱码。
参数绑定注解:
Restful风格的参数:
=================================================
自定义类型转换器:
SpringMVC获取Servlet的相关API:
获得请求头:
Cookie值:
文件上传:
实现步骤:
浏览器:
服务端:
单文件:那么就只需要一个MultipartFile去接就可以了。
多文件:
=================================================
Spring JdbcTemplate:
=================================================
Spring练习环境搭建:
完成一个Spring 、SpringMVC的联系项目
=================================================
拦截器(Interceptor)
Filter和Interceptor的区别:
在一些基本功能上面,Filter和Interceptor是相差无异的。在SpringMVC的项目当中一般都是使用的Interceptor。
项目中的一些jsp页面,图片等等一些静态资源的访问,并不单单取决于Interceptor的配置,有一个静态资源放行的配置也是很重要的。
<!--3、静态资源权限开放--> <mvc:default-servlet-handler/>
Interceptor内部的三个方法:
自定义拦截器的步骤:
1、创建拦截器实现HandlerInterceptor接口
2、配置拦截器
在spring-mvc.xml文件里面配置好拦截器。
3、编写代码测试。。(图略)
SpringMVC的异常处理机制:
异常处理的两种方式:
1、第一种异常处理方式:
SpringMVC里的简单异常处理器SimpleMappingExceptionResolver:
2、第二种异常处理方式:
自定义异常处理类去实现HandlerExceptionResolver接口,用里面的异常类型这个参数来进行判断,就可以实现对不同的类型异常进行不同的操作。
=================================================
Spring里的AOP:
AOP作用与优势:
AOP的动态代理技术:
AOP的底层代码实现:
JDK动态代理:
cglib的动态代理:
AOP的相关概念:
通俗一点理解:
连接点就是全部可以被增强的方法,还没被增强。
切入点就是已经被增强的方法。
切面就是被增强的方法和通知的结合
AOP开发明确事项:
切点表达式的写法:
通知的类型 :
注解方式配置AOP开发:
在增强类上方加上@Conponent的注解给Spring容器管理,然后加上@Aspect注解通知Spring容器它是一个切面类。
在需要加强的类上面加入@Component注解交给Spring容器来管理
最后,需要在配置文件里面,加上注解扫描和AOP的自动代理。这样才能完整识别。
抽取定义切点表达式
=================================================
Spring的事务控制:
编程式事务控制相关对象:
封装一些事务相关的参数
事物的隔离级别:
事务传播行为:
事务的状态信息:
声明式事务控制:
增强配置的属性:
配置事务的属性,可以针对方法来添加不同的属性值。
基于注解的声明式事务控制:
既然是使用注解,那么就需要在applicationContext.xml文件里打开组件扫描。
将不是自己定义的类用bean标签配置好。
使用注解配置Dao类,注入jdbcTemplate。
将Service交由Spring容器管理,注入Dao实现类。
在需要添加事务的方法上面用@Transactional注解配置事务,后面可以配置参数。
同样,这个Transactional注解也可以放到Service层上,那么这个Service层所有方法都会执行这个事务。
=================================================
Mybatis:
原始JDBC开发的问题:
MyBatis映射文件概述:
MyBatis基本的实现步骤
mapper映射文件文件
配置文件:主要就是配置你的数据源,还得去加载映射文件
插入操作:
修改操作:
删除操作:
MyBatis核心配置文件:
Environment标签:
mapper标签:
properties标签:
typeAliases标签(别名):
SqlSession工厂构造器SQL SessionFactoryBuilder:
常用api:
MyBatis的Dao层实现:
使用代理开发的方式:
编写Mapper接口:
动态SQL:
<if>标签的使用:
原版语句如下,并不能实现动态:
select * from user where id=#{id} and username=#{username} and password=#{password}
<foreach>标签的使用:
原版语句如下,并不能实现动态:
select * from user id in(?,?,?)
MyBatis映射文件涉及的标签:
=================================================
MyBatis核心配置文件的深入:
typeHandlers标签:
类型处理器:
如果不符合自己的要求吗,可以重写类型转换器:
PageHelper
在导入相关的坐标之后,在Mybatis配置文件里用plugins标签来配置
然后在你想要进行分页查询的语句前面,就可以设置分页的条件了。
如果需要获取到分页的信息的话,可以创建一个PageInfo对象,将你所查数据的类型,和查询的对象集合传给他,就能获取数据
一对一查询的配置
一对多的表查询的配置:
多对多
一对一:<result> + <association>标签就可以解决
一对多:<result> + <collection>标签
多对多:相对于一对多来说,就只是多了一张中间表。配置方式都是一样的
使用注解:
直接将注解加到mapper的接口类里的方法上面。
复杂查询:
一对一的封装方式:只需要一个Results的注解,跟xml配置文件里的标签用法类似
一对多的封装方式: