一、原理
1、spring的核心机制是IOC(反转控制、依赖注入)和AOP(面向切面编程)。
注1:spring是一站式的框架,对EE的三层有每一层的解决方案,Web层,业务层,数据访问层.Web层:SpringMVC , 持久层:JDBC Template , 业务层 : Spring的Bean管理。 IOC思想 : 工厂+反射+配置文件,底层原理就是提供一个工厂Bean,然后提供一个配置文件,把一些类全都配置在配置文件中,通过xml解析获得类的全路径,从而反射获得类的实例。
注2:AOP就是面向切面编程,通过预编译的方式和运行期动态代理实现程序功能的统一维护的技术。主要的功能是 : 日志记录,性能统计,安全控制,事务处理,异常处理等。
2、概念:
(1)当摸个角色需要另一个角色协助的时候,传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring中穿件被调用者的实例不在由被调用者来完成,因此称为控制反转。创建被调用者的工作由Spring来完成,然后注入调用者,因此也称为依赖注入。(特征:降低了组建的耦合性)
(2)面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。(特征:各步骤之间良好的隔离型,源代码无关性)
二、事务
1、事务
事务:是逻辑上的一组操作,要么全部成功,要么全部失败
事务的特性 : ACID
- Atomicity 原子性: 事务不可分隔
- Consister 一致性: 事务执行的前后,数据完整性保持一致.
- Isolation 隔离性: 一个事务执行的时候,不应该收到其他事务的干扰
- Durability 持久性: 一旦结束,数据永久的保存到数据库
2、spring中的事务管理
分层开发: 事务处于service层
Spring的事务管理分成两类:
- 编程式事务管理: 手动编写代码完成事务管理.
- 声明式事务管理: 不需要手动编写代码,配置
spring中的注解:
- @Component("")
- @Service("") 装配Bean,标示为service类
- @Repository("") 装配Bean,标示为dao类
- @Controller("") 装配Bean,标示为controller类
- @Autowired @Qualifier("userDao"): 在类中注入Bean
- @Aspect 定义切面
- @Before("execution(* com.luogg.demo1.UserDao.*(..))") 前置增强
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration("classpath:applicationContext.xml")单元测试注解
- @Transactional 声明事务
这里讲下声明事务管理的操作:配置XML文件,(包括事务管理,连接池的配置) ---> 在需要使用注解的方法前边加上注解@Transactional
<!-- 引入外部属性文件. --> 2 <context:property-placeholder location="classpath:jdbc.properties"/> 3 4 <!-- 配置c3p0连接池 --> 5 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 6 <property name="driverClass" value="${jdbc.driver}"/> 7 <property name="jdbcUrl" value="${jdbc.url}"/> 8 <property name="user" value="${jdbc.user}"/> 9 <property name="password" value="${jdbc.password}"/> 10 </bean> 11 12 <!-- 业务层类 --> 13 <bean id="accountService" class="cn.itcast.spring3.demo4.AccountServiceImpl"> 14 <!-- 在业务层注入Dao --> 15 <property name="accountDao" ref="accountDao"/> 16 </bean> 17 18 <!-- 持久层类 --> 19 <bean id="accountDao" class="cn.itcast.spring3.demo4.AccountDaoImpl"> 20 <!-- 注入连接池的对象,通过连接池对象创建模板. --> 21 <property name="dataSource" ref="dataSource"/> 22 </bean> 23 24 <!-- 事务管理器 --> 25 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 26 <property name="dataSource" ref="dataSource"/> 27 </bean> 28 29 <!-- 开启注解的事务管理 --> 30 <tx:annotation-driven/>