spring小结
1. 什么是spring
- 是一个框架,核心技术是ioc,aop,实现解耦合。
- spring是一个容器,容器中存放的是java对象,需要做的是把对象放入到容器中。
2. 怎么使用spring
- spring是一个容器,把项目中用的对象放入到容器中
- 让容器完成对象的创建,对象之间关系的管理(属性赋值)
- 我们在程序中,从容器中获取要使用的对象
3. 怎么样的对象放入容器中
dao类,service类,controller类,工具类- 使用xml配置文件,使用
<bean> - 注解
- 使用xml配置文件,使用
- spring中的对象默认都是单例的,在容器中叫这个名称的对象只有一个
4. 不放入到spring容器中的对象
- 实体类对象,实体类数据来自数据库
servlet,listener,filter等
5. 使用spring框架的步骤
加入依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency>创建类:接口,实现类,没有接口的类
创建spring的配置文件,使用
<bean>声明对象我们使用容器中的对象,通过
ApplicationContext接口和它的实现类ClassPathXmlApplicationContext的方法getBean()
6. 核心技术
ioc:控制反转- 理论,思想,概念:指导开发人员在容器中,代码之外管理对象,给属性赋值,管理依赖
ioc技术实现使用的di(依赖注入):开发人员在项目中只需要提供对象的名称,对象的创建、查找、赋值都由容器内部自己实现spring使用的
di的技术,底层使用的是反射机制di给属性赋值:- set注入:spring调用类的set方法实现属性赋值
- 简单类型的set注入,
<property name="属性名" value="属性的值"/> - 引用类型的set注入,
property name="属性名" ref="bean的id"/>
- 简单类型的set注入,
- 构造注入:spring调用有参数构造方法
<constructor-arg>的name属性,name表示构造方法的形参名<constructor-arg>的index属性,index表示构造方法形参的位置,从0开始
- set注入:spring调用类的set方法实现属性赋值
aop:面向切面编程- 底层是动态代理
- jdk动态代理
- 使用jdk反射包中的类实现创建代理对象的功能
- 要求:目标类必须实现接口
- cglib动态代理
- 使用第三方的工具库,实现代理对象的创建
- 要求:目标类必须能够继承,不能是final
- 原理:就是继承,子类就是代理
- jdk动态代理
- aop:看作是动态代理的规范化,把实现动态代理的步骤进行了一个规范,定义
- aop作用:
- 在目标类不修改源代码的情况下,增加功能
- 减少重复的代码
- 专注业务功能的实现
- 解耦合:业务功能和日志,事务这些非业务功能的耦合
- 什么时候考虑使用aop技术
- 当你要给一个系统中存在的类修改功能,但是原有类的功能不完善,但是你还有源代码,使用aop增加功能
- 要给项目中的多个类,增加一个相同的功能,使用aop
- 给业务方法增加事务,日志输出
- aop的实现框架
spring实现了aop,实现方式是接口aspectj框架- 使用注解可以实现aop的功能
- 使用xml配置文件中的标签实现aop功能
- aop中的概念
aspect:切面,表示给业务方法增加的功能,一般日志输出,事务,权限检查等是切面pointcut:切入点,是一个或多个JoinPoint的集合,表示切面功能执行的位置advice:通知,也叫增强,表示切面执行的时间,在方法前,方法后等等
aspectj框架的使用- 表示切面的执行时间,使用的通知注解
@Before:前置通知,在目标方法之前先执行切面的功能@AfterReturning:后置通知,在目标方法之后执行的,能够获取到目标方法的返回值@Around:环绕通知,在目标方法前和后都能增强功能,控制目标方法的访问,修改返回值@AfterThrowing:异常通知,在目标方法抛出异常后执行的通知@After:最终通知,总是会被执行的代码@Pointcut:定义和管理切入点的辅助注解- 代理的使用方式
- 如果目标类有接口,框架使用jdk动态代理
- 如果目标类没有接口,默认使用的cglib动态代理
- 有接口也可以强制使用cglib动态代理
- 表示切面位置的切入点表达式:
execution(访问修饰符 返回值 包名.类名.方法名称(方法的参数) 异常)
- 表示切面的执行时间,使用的通知注解
- 底层是动态代理
spring整合mybatis
整合的想法:使用spring的ioc核心技术,把mybatis框架中使用的对象交给spring统一创建和管理。spring是容器,存放你项目中要是用的各种对象,例如Service对象,Dao对象,工具类对象等等。
交给spring的mybatis对象
数据源DataSource,使用阿里公司的
Druid连接池SqlSessionFactory对象,使用的
SqlSessionFactoryBean在内部创建的SqlSessionFactoryDao代理对象,使用的
MapperScannerConfigurer,在这个类的内部,调用getMapper(),创建接口的Dao对象
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!