Spring是一个开放源代码的设计层面框架, 他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。 Spring是于2003 年兴起的一个轻量级的Java 开发框架 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
IOC: Inversion of Control(控制反转) 控制反转:将对象的创建权反转给(交给)Spring。
业务和实现类过于紧密,底层业务要修改源代码

通过工厂可以实现,接口与实现业务的分离

在工厂内部使用配置文件加载



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

DI 依赖注入 前提必须有IOC的环境 Spring管理这个类的时候才能将类的依赖的属性值注入(设置)进来 依赖注入:给spring管理类当中依赖的属性,通过配置文件进行赋值的过程
传统方式

DI方式 1.实现类当中的属性要提供set方法

2.在配置文件当中配置依赖注入

测试



id:使用了约束中的唯一约束。里面不能出现特殊字符的 name:没有使用约束中的唯一约束。里面可以出现特殊字符。
init-method Bean被初始化的时候执行的方法 destroy-method Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)


scope






在加载时,添加多个配置文件名称

在一个配置文件当中引入另一个配置文件









xmlns:p="http://www.springframework.org/schema/p"


2. List集合






在spring4之后,想要使用注解形式,必须得要引入aop的包

在配置文件当中,还得要引入一个context约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>哪个包下的类型使用组合扫描



可以不用提供set方法,直接在直接名上添加@value(“值”) 如果提供了set方法,在set方法上添加@value(“值”);

修改一个类,将这个类交给Spring管理 相当于在配置文件当中配置 < bean id="" class="">
@Component三个衍生注解 为了更好的进行分层,Spring可以使用其它三个注解,功能类似 目前使用哪一个功能都一样, 后期可能会添加一些属于各自的属性



习惯是按照名称完成属性注入 必须让@Autowired注解与@Qualifier一起使用

单独使用@Resource


XML可以适用任何场景 ,结构清晰,维护方便 注解不是自己提供的类使用不了,开发简单方便
XML管理Bean 注解完成属性注入 使用过程中, 可以不用扫描,扫描是为了类上的注解
在没有扫描的情况下, 使用属性注解@Resource @Value @Autowired @Qulifier
<context:annotation-config/>
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。



Cglig是一个第三方开源代码 生成类库,动态添加类的属性和方法。
在spring的核心包当中已经引入了cglib

采用的是继承方式来产生的代理对象


AOP思想最早是由AOP联盟组织提出的 Spring使用这种思想最好的框架
AspectJ Spring的AOP有自己的实现方式,但是这种方式非常繁琐 AspectJ 是一个AOP的框架 Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发




在目标方法执行之前进行操作
在目标方法执行之后 进行操作


在目标方法执行之前 和之后进行操作 public Object arount()


在程序出现异常时进行操作


无论代码是否有异常,都会执行

基于execution函数完成
【访问修饰符】 方法返回值 包名.类名.方法名(参数) public com.myxq.demo2.GoodsDaoImpl.save(..)
参数为任意参数* com.myxq.demo2.GoodsDaoImpl.save(..)
* 任意类型* com.myxq.demo2.GoodsDaoImpl+.save(..)
+ 当前类和子类* com.myxq..*.*(..)
com.myxq包以及子包下面所有类的所有方法





在切面类上添加注解


有返回值

@Around环绕通知

@AfterThrowing异常抛出通知 没有获取异常信息

获取异常信息

@After最终通知

有时候一个方法要添加前置通知对又要添加异常通知,又要添加最终通知 可以在切面当中定义好切入点 在通知当中直接使用定义好的切入点表达式

一个通知同时定义到多个方法当中

使用接口


Spring是EE开发的一站式的框架,有EE开发的每层的解决方案。 Spring对持久层也提供了解决方案:ORM模块和JDBC的模板。 Spring提供了很多的模板用于简化开发
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);Spring的JDBC模板的jar包


配置文件配置Bean

使用jdbcTemplate注解插入数据


配置DBCP连接池


配置


配置



< context/>




查询某一个字段


查询返回对象的集合


什么事务
逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败。
事务的特性 原子性:事务不可分割 一致性:事务执行前后数据完整性保持一致 隔离性:一个事务的执行不应该受到其他事务的干扰 持久性:一旦事务结束,数据就持久化到数据库
如果不考虑隔离性引发安全性问题
读问题
脏读 :一个事务读到另一个事务未提交的数据 不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致 虚读、幻读 :一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致。
写问题
丢失更新
解决读问题 设置事务的隔离级别
PlatformTransactionManager
PlatformTransactionManage:平台事务管理器 是一个接口,下面有两个实现类
TransactionDefinition
事务定义信息:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
TransactionStatus
事务状态:用于记录在事务管理过程中,事务的状态的对象。
事务管理的API的关系
Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理, 在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。
什么是传播行为
一个业务方法当中,调用另一个业务的方法
Spring中提供了七种事务的传播行为 保证多个操作在同一个事务中
保证多个操作不在同一个事务中
嵌套式事务 PROPAGATION_NESTED 嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点 执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点

2.实现Dao接口

3.把Dao交给Spring管理

5.在Dao中注入数据源 在DAO当中注入jdbc模板,要保证dao继承了JdbcDaoSupport

继承之后, 就有了datasource的set方法,就可以注入了
Dao继承JdbcDaoSupport

DAO注入JDBC模板

6.创建Account业务


7.配置service 交给spring 并注入dao


8.测试

需要手动编写代码 步骤
<!--配置事务管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!--配置事务管理模板-->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"/>
</bean>

1.引入aop的开发包 2.配置事务管理器
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>3.AOP的配置
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>配置

配置事务管理器 开启注解事务

在业务层添加注解
