导入aop+aspectj一共四个jar
引入aop约束
编写目标类-将目标类配置到容器
开启自动注解代理:
Aspectj的aop注解:
@aspect 定义切面类
@Before @After最终通知 @AfterReturning后置通知@AfterThrowing异常抛出
@pointcut定义切点注解
完整写一个切面类例子:
@component
@Aspect
public class A{
@Before(“A.c()”)
public void a(){
syso(“1”);
}
@pointcut(“execution(* ----.-.point1(..))”)
public void c(){};
}
变成切面类需要两步:
1)在类上使用@Component注解蒋类注入到容器
2)在类上使用@aspect注解蒋类生明为切面类
Spring提供了持久类技术的模板类简化编程。
JDBC-jdbcTemplate
Hibernate3.0-HibernateTemplate
Mybatis-SqlMapClientTemplate
提供了spring对jdbc的封装(jdbctemplate),语法类似于DButils。
Spring-tx包功能:提供一致式的和编程式的事务管理。包括使用jdbctemplate也需要此包
Spring-test:对juint测试简单封装
DriverManagerDataSource dds=New DriverManagerDatasource();
dds.setDriverClassName(“”);
dds.setUrl(“”);
Dds.setpassword(“”);
Dds.setUsername(“”);
jdbcTemplate jt=New jdbcTemplate(dds);
Jt,insert(“”);
将连接池配置给spring容器(配置spring内置的连接池):
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class User {
@Autowired
private JdbcTemplate jt;
@Test
public void getBean(){
jt.execute("insert into cccccc values (1,5)");
}
}
@Runwith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境(标记于类上)
使用了蓝色标记的,在直接使用juint的test测试时,不用配置web.xml文件,不用启动spring容器,它自动给我们创建了容器的上下文。
@ContextConfiguration:Spring整合juint4测试时,使用此注解引入多个配置文件。(加在类上)(它是test包下的)
引入一个:@ContextConfiguretion(“classpath:applicationContext.xml”)
需要导一个c3p0的jar。
其它配置方式和上面的spring自带的池相同。(dbcp需要导入2个包)
插入:update
修改:update
删除:update
查询:queryForObject(,,1)1条
1.原子性:事务不可分割
2.事务执行前后的数据的完整性保持一致
3.隔离性:一个事务的执行,不受其它事务的干扰。
4.事务一旦结束,事务就持久到数据库
事务的隔离性引发的安全问题:
脏读:一个事务读到了另一个事务未提交的数据。
不可重复读:
虚幻读:
Msyql默认事务隔离级别是:可重复读,避免了脏读和不可重复读,虚读无法避免
Oracle默认是读已提交:避免了脏读
PlatFormtransactionManager:平台事务管理器。
使用SpringJDBC或mybatis进行持久化操作时使用:***DataSourceTransactionManager
使用hibernate进行持久化操作:hibernateTransactionManager
TransactionDefinition:事务定义信息,传播、级别、是否只读
TransactionStatus:事务的状态
Spring是如何进行事务管理的,平台食物管理器根据定义的信息进行事务管理,在管理过程中会出现一些状态,将这些状态记录在transactionStatus中。
Spring的默认事务传播行为是:支持当前事务,如果不存在就新建一个。REQUIRED
配置事务管理器:
配置事务管理的模板:
以上配置完之后,需要在业务层对象注入事务管理模板
此时可以手动完成事务编程....了解即可transactionTemplate.execute.......
Spring的声明式事务,xml方式。aop
引入aop四个包
配置事务管理器:transactionManager
配置事务通知:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="ceshi" propagation="REQUIRED"/>
tx:attributes>
tx:advice>
配置aop事务:
Spring的声明式事务,注解方式。aop
引包,还是那几个
配置事务管理器DataSourceTransactionManager
开启注解事务管理
在需要使用事务的类上加入注解@Transactional