sping随笔

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属性可以配置切入点表达式

  1. execution是切入点指示符,括号中是切入点表达式,用于配置需要切入增强处理的方法的特征
  2. 第一个*表示匹配所有类型的返回值
  3. 第二个*表示匹配所有类
  4. 第三个*表示匹配所有方法名

在切入点处插入增强处理,这个过程叫织入
依赖注入扩展
使用<constructor-arg>元素配置构造注入

  • 当构造方法的参数出现混淆/无法区分时,可以通过<constructor-arg>元素的inddex属性指定该参数的位置索引,索引从0开始
  • type属性指定参数的类型,避免字符串和基本数据类型的混淆

使用p命名空间进行直接量和引入Bean的注入
使用注解实现IoC
4类注解

  1. @Repository用于标注DAO类
  2. @Service用于标注业务类
  3. @Controller:用于标注控制器
  4. @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配置步骤

  1. 添加jar包
  2. 建立开发目录结构,创建实体类
  3. 创建数据访问接口
  4. 配置SQL映射文件
  5. 配置MyBatis配置文件

实现Spring对MyBatis的整合

  1. 配置DataSource数据源
  2. 配置SqlSessionFactoryBean
  3. 使用SqlSessionTemplate进行持久化操作
  4. 编写测试类测试运行结果
上一篇:利用sping-cloud feign进行远程调用?


下一篇:JavaWeb - Sping & Sping IOC