一、Spring
1、核心概念
当要使用对象的时候ioc容器就会为其提供对象,在ioc容器中会将service与之对应关系的dao绑定起来,一起依赖注入给业务层,这样对象所依赖的所有东西都一起完成了。
(1)Ioc入门
(2)DI入门
(3)bean的基础配置
当要创建对象时,使用getBean(“对应id值”)来让容器里面对应的bean来创建
在bean中使用scope<>能够进行范围限制,bean默认为单例(一个类创建的多个对象,最终都是一样的,你调用这个对象,返回的地址都是一样的),使用scope<prototype>,那么你调用这个对象时,就会生成不同的地址。
(4)bean的实例化
在外部创建对象时,spring是通过无参构造方法来进行对象的创建的
(5)bean的生命周期
2、依赖注入方式
(1)setter注入
name表示的是形参的值
(2)构造器注入
3、依赖自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
4、加载properties文件
标准的加载properties文件写法(这个只能读取当前工程的配置文件,jar包里面的不能读取):
如果想读取jar包里面的配置文件则需要下面这样:
5、注解开发定义bean
(1)注解开发
接口:
接口实现类:
容器配置文件:
执行输出:
不同层次不同的注解,增加区分度:
(2)纯注解开发
将注解开发配置文件修改为配置类,这样就不用单独的去使用配置文件,在获取这个配置类的时候通过 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); 来获取。
(3)注解开发依赖注入
(4)加载properties文件
(5)注解开发管理第三方bean(数据库连接jdbc)
不建议使用上面这种方法,jdbc的配置类应该单独写bean,如下(单独写一个JdbcConfig,然后将里面的方法用bean注解(表示该方法的返回值为一个bean),在核心配置类SpringConfig里面使用Import注解加入jdbc的配置类):
注入资源:
6、Spring整合Mybatis
整合具体过程:
将配置文件写成配置类时,建立数据库连接的过程被整合成sqlSessionFactory()方法,其中dataSource通过参数传值的方法进行注入
扫描映射文件找到数据库操作方法的过程被整合成mapperScannerConfigurer()方法,两种方法都被注解了Bean,成为了spring容器的一部分,当外部需要用到某个对象时,容器就将创建好的对象传递给外部。
通过配置类来实现数据库操作:
核心配置类(代替了容器的配置文件,Configuration注解表示该类为配置类、ComponentScan(“”)注解表示了扫描该路径下的所有bean(就是各个类前面使用Component及其其他三个衍生注解的类就是bean)),通过注解加入jdbc、mybatis配置类:
7、AOP
(1)AOP简介
(2)步骤
(3)AOP工作流程
(4)AOP切入点表达式
(5)AOP通知类型
(6)AOP通知获取数据
获取原始方法的参数(并且还能根据数组对应的去修改参数):
获取原始方法的返回值:
案例(处理字符串空格,将接收到的参数获取下来,然后去修改参数的值,处理空格问题,最后再将处理好的参数重新传递给对象):
Pointcut定义了切入点,Around使用环绕将切入点与通知联系起来,ProceedingJoinPoint声明对象来获取原始方法的数据,pjp.getArgs()获取原始方法的参数,然后将得到的参数去进行逻辑处理,然后将修改的参数重新传递给对象,然后返回。
(7)AOP总结
8、Spring事务
(1)事务简介
(2)案例
注解bean的作用:将方法的返回值对象设置为bean,当外部需要时,容器就将对象传递出去
标红注解:向spring容器说明我们是用注解写的配置类
(3)事务角色
(4)事务属性
相关配置:
事务传播:
案例:
上面的案例日志事务、转账的两个事务都会归属于同同一个事务,这样要么都成功要么都失败。但当我们想要实现转账日志不管转账成功与否都要显示出来,那么我们就要把日志事务单独重新设置为一个事务,可以采取下面的propagation设置形式:
二、SpringMVC
1、SpringMVC简介
(1)概述
(2)案例
在spring容器中,注解Controller将springmvc控制器类定义为bean(能够让容器创建对象);注解RequestMapping设置当前控制器方法请求访问路径;注解ResponseBody设置当前控制器方法响应内容为当前返回值,无需解析
注解Configuration表示此类为配置类,注解ComponentScan表示扫描特定包下的bean
SerletContainersInitConfig类相当于web.xml (初始化一个web容器,服务器启动后就会执行这个类初始化生成一个web容器)。createServletApplicationContext方法主要是让tomcat容器加载spring配置;getServletMappings方法是让tomcat容器接收到的所有请求交给springmvc去处理。
总结:总的流程大体是先导入相关坐标→再书写控制层的类(与servlet功能相同),其中这个类记得要定义为bean以便能够让外部容器扫描到,里面注解了请求和响应→为了能够去加载bean,还需要去设置一个springmvc的配置类,能够去扫描相关包下的bean→最后为了能够让tomcat知道这是一个springmvc的注解配置还需要设置一个继承AbstractDispatcherServletInitializer的web容器启动类去处理相关请求。
执行流程分析:
(3)Controller与bean的加载控制
因为功能的不同,我们需要避免Spring核心配置类错误的加载到SpringMVC的bean。
(4)PostMan插件
2、SpringMVC请求与响应
当RequestMapping注解在类前面时就代表整个模块的访问前缀,在方法前面就是具体访问名称
(1)请求参数
pojo参数(实体类),外面的属性将会塞给这个实体类参数。
总结:默认的参数都能够对应上,不能对应上的(报错),前面加一个RequestParam的注解
请求参数:传递json数据
日期类型参数传递:
当日期格式跟默认格式不一致时,就使用DateTimeFormat注解自己设定日期时间数据格式
(2)响应
3、REST风格
案例步骤:
requestBody注解表示接收json数据(也就是请求体数据)
页面交互案例:
由于所有的请求都被springmvc处理,所以我们要对静态资源放行:
4、SSM整合
(1)SSM整合流程
(2)表现层数据封装
(3)异常处理器
(4)项目异常处理方案
步骤:
5、拦截器
(1)拦截器入门案例
projectInterceptor类写在表现层下面,如果里面的preHandle方法返回的值为false,那么就会被拦截(在这个里面可以进行判断,不满足条件的就拦截下来);
配置类里面的addInterceptors主要是实现当访问哪些路径的时候执行拦截器功能,例如第三步
(2)拦截器参数详解
运用了反射的机制,相当于拿到了handler,就可以对原始的那个方法进行操作。
(3)多拦截器的执行顺序
正如上图所示:当只有1返回false时,执行前置1的信息后直接退出,后面所有的都不会执行;当只有2返回false时,执行前置1、2的信息后直接调转到执行后置1,其余的都不执行;当只用3返回false时,执行前置1、2、3的信息后直接跳转到执行后置2、1,然后退出。
6、Maven进阶
(1)分模块开发与设计(将子模块首先下载到本地仓库(install),然后再在其他模块中导入子模块的坐标)
(2)依赖管理
(3)聚合与继承
(4)属性管理
(5)多环境配置与应用
(6)私服
三、SpringBoot
1、SpringBoot简介
(1)入门案例
执行启动的时候要在jar包所在路径下打开cmd执命令
(2)SpringBoot概述
在<artifactId/>标签里面有starter就表示为起步依赖,里面依赖了许多其他资源(上面两个一个为版本管理“父资源”坐标,一个是依赖管理)
2、基础配置
(1)配置文件格式
(2)yaml
Enviroment对象是将ymal里面的所有数据全部封装到一起,然后根据属性值去调用
自定义一个实体类去封装对应的属性,通过ConfigurationProperties注解去定义封装哪个属性内容,然后通过自动装配去实现调用,就相当于一个普通的实体类调用
(3)多环境启动
当打包成jar包传递给前端人员的时候,如果他想改变启用环境和端口号,则可以在jar包对应文件下打开命令行,然后对应输入命令:
处理Maven与SpringBoot多环境兼容(boot应该听从Maven的配置):
(4)配置文件分类
3、SpringBoot整合第三方技术
(1)整合junit
(2)整合SSM
①SpringBoot整合Spring(不存在)
②SpringBoot整合SpringMVC(不存在)
③SpringBoot整合MyBatis