Spring
IoC概念
Spring Core 是框架的最基础部分,提供了IoC特性
Spring AOP是基于Spring Core的符合规范的面向切面编程的实现。
控制反转IoC
- 也称为依赖注入,是面向对象编程的一种设计理念,用来降低程序代码之间的耦合度。
- 依赖一般通过局部变量/方法参数/返回值等建立的对于其他对象的调用关系。
Bean的实例
- 在Spring配置文件中,使用<bean>元素来定义Bean(也可称为组件)的实例。
- <bean>元素有两个常用属性:一个是id,表示定义的Bean实例的名称;另一个是class,表示定义的Bean实例的类型。
- 设值注入:Spring为Bean的属性赋值是通过属性的setter方法实现的,而非直接为属性赋值。
ApplicationContext:是一个接口,负责读取Spring配置文件,管理对象的加载/生成/维护Bean对象之间的依赖关系,负责Bean的生命周期等。
ClassPathXmlApplicationContext:是ApplicationContext接口的实现类,用于从classpath路径中读取Spring配置文件。
Ioc控制反转:实现原理:Spring会自动接管配置文件中Bean的创建和为属性赋值的工作。Spring在创建Bean的实例后,会调用相应的setter方法为实例设置属性值。实例的属性值不再由程序中的代码来主动创建和管理,改为被动接受Spring的注入,使得组件之间以配置文件而不是硬编码的方式组织在一起。
依赖注入:实现原理:由容器负责把组件所依赖的具体对象注入给组件,从而避免组件之间以硬编码的方式耦合在一起。
AOP概念
AOP定义:在不改变原有程序的基础上为代码增加新的功能,对其进行增强处理,设计思想来源于代理设计模式。
AOP的目的:从系统中分离出切面,将其独立于业务逻辑实现,并在程序执行时织入程序中运行
适用场景:一般适用于具有横切逻辑的场合,如访问控制/事务管理/性能监测等。
关心的两个问题:在什么位置,执行什么功能
基本概念
- 切面(Aspect)
一个模块化的横切逻辑(或称横切关注点),可能会横切多个对象。
- 连接点(Join Point)
程序执行中的某个具体的执行点
- 增强处理(Advice)
切面在某个特定连接点上执行的代码逻辑
- 切入点(Pointcut)
对连接点的特征进行描述,可以使用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。
- 目标对象(Target object)
被一个或多个切面增强的对象
- AOP代理(AOPproxy)
由AOP框架所创建的对象,实现执行增强处理方法等功能。
- 织入(Weaving)
将增强处理连接到应用程序中的类型或对象上的过程。
- 增强处理类型
前置增强/后置增强/环绕增强/异常抛出增强/最终增强等类型
前置/后置增强方法
通过实例的getTarget()方法得到被代理的目标对象
通过getSignature()方法返回被代理的目标方法
getArgs()返回传递给目标方法的参数数组
afterReturning()方法还可以定义一个参数用于接收目标方法的返回值
aop命名空间
在<bean>元素中需要添加aop的名称空间,以导入与AOP相关的标签
与AOP相关的配置都放在<aop:config>标签中,如配置切入点的标签<aop:pointcut>的expression属性可以配置切入点表达式
- execution是切入点指示符,括号中是切入点表达式,用于配置需要切入增强处理的方法的特征
- 第一个*表示匹配所有类型的返回值
- 第二个*表示匹配所有类
- 第三个*表示匹配所有方法名
在切入点处插入增强处理,这个过程叫织入
依赖注入扩展
使用<constructor-arg>元素配置构造注入
- 当构造方法的参数出现混淆/无法区分时,可以通过<constructor-arg>元素的inddex属性指定该参数的位置索引,索引从0开始
- type属性指定参数的类型,避免字符串和基本数据类型的混淆
使用p命名空间进行直接量和引入Bean的注入
使用注解实现IoC
4类注解
- @Repository用于标注DAO类
- @Service用于标注业务类
- @Controller:用于标注控制器
- @Component:其他注解
加载注解定义的bean组件
在Spring配置文件中添加对context命名空间的声明,然后使用context命名空间下的component-scan标签扫描注解标注的类。base-package属性指定了需要扫描的基准包
- @Autowired注解
采用按类型匹配的方式为属性自动装配合适的依赖对象
可以使用@Qualifier指定所需的Bean的名称
- @Resource注解实现组件装配
- 如果没有显示的指定Bean的名称,@Resource注解将根据字段名或setter方法名产生默认的名称
- 如果没有显示地指定Bean名称,且无法找到与默认Bean名称匹配的Bean组件,@Resource注解会由按名称查找的方式自动变为按类型匹配的方式进行装配
使用注解实现AOP
- AspectJ是一个面向切面的框架
- @Around注解可以定义环绕增强。通过为增强方法声明ProceedingJoinPoint类型的参数,可以获得连接点信息。通过它的proceed()方法可以调用真正的目标方法,从而实现对连接点的完全控制。
切入点表达式使用@Pointcut注解表示,而切入点签名则需要通过一个普通的方法定义来提供
spring与mybatis整合
mybatis配置步骤
- 添加jar包
- 建立开发目录结构,创建实体类
- 创建数据访问接口
- 配置SQL映射文件
- 配置MyBatis配置文件
实现Spring对MyBatis的整合
- 配置DataSource数据源
- 配置SqlSessionFactoryBean
- 使用SqlSessionTemplate进行持久化操作
- 编写测试类测试运行结果