Spring笔记 Day03
Spring的AOP的开发(AspectJ的注解方式)
AOP 模块提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来
aop的底层实现
如果采用接口 Spring底层自动采用jdbc动态代理
如果没有采用Cjlib动态代理
aop注解入门开发:
1.将目标类和切面类交给spring管理
2.
<aop:aspectj-autoproxy />
3.在切面类中添加注解@Aspect和对应的通知注解
@Before(value=“切入点表达式”)
后置通知: 无论是否有错误都会执行通知
当需要多处用一个方法加强时
可以直接定义切入点注释
然后在别的加强方法中直接调用
//切入点注释
@Pointcut(value="execution(* com.UserDao.UserDao.thoww(..))")
public void pointcut1() {}
Spring的JDBC的模板的使用
com.demo1
jdbcDemo1:传统的jdbc模板的写法
jdbcDemo2:通过Spring内部配置的jdbc模板写法 (jdbc dbcp c3p0分别测试)
引入jar
1.一般用法类似于dbutils
2.将连接池的配置将给spring
通过属性注入完成 注册驱动 url username/password
3.将jdbc 的模板交给spring管理
将连接池通过属性注入到jdbc的模板中
4.在测试类中 通过注解得到 jdbcTemplate 完成数据库操作
使用开源连接池
dbcp:
c3p0:
用于将类交给spring管理、属性注入、直接在测试类中用jdbc模板
抽取数据库配置从xml中提取出来
1.new file
2.xml中引入属性文件
第一种方式 通过bean标签(应用少)
classpath 路径:src路径下的文件在编译后会放到WEB-INF/classes路径下吧。默认的classpath是在这里。直接放到WEB-INF下的话,是不在classpath下的。用ClassPathXmlApplicationContext当然获取不到
第二种方式:通过context标签引用(一般采用)
<context:property-placeholder location=“classpath:jdbc.properties”/>
通过引用属性文件;
然后在value中输入${key值}
通过jdbc模板进行CRUD操作 --添删改查
返回对象
返回值是一个对象时 采用接口方式封装对象
RowMapper 内置方法将结果放置到结果集中然后set到自定义类中
Spring的事务管理
com.demo2 事务管理编写
复习事务
Spring进行事务管理的时候,首先***平台事务管理器***根据***事务定义信息***进行事务管理,在事务管理过程中,产生各种状态,将这些状态的信息记录到***事务状态***的对象中。
平台事务管理器:接口,是Spring用于管理事务真正的对象!
DataSourceTransactionManager:底层使用jdbc管理事务
事务定义信息:用于定义事务的相关信息:隔离级别,超时信息,传播行为,是否只读 TransactionDefinition
事务状态:用于记录在事务管理过程中,事务状态的对象TransactionStatus
传播行为:
Spring中提供了七种传播行为
事务的传播行为主要用来解决业务方法互相调用的问题
分为三类 : 1.保证多个操作是在同一个事务中,
2.保证多个操作不在同一个事务中,
3.嵌套事务
propagation requierd 默认值
requires new
nested
搭建Spring的事务管理的环境
转账案例:SpringDay_03-jdbc-demo2
1.Service
2.Dao
3.application
添加事务:
一:编程式事务
1.配置平台事务管理器
2.配置事务管理模板(简化事务编写代码)
3.在业务层注入事务管理的模板
4.编写事务管理代码
二:声明式事务管理
①xml方式的声明式事务管理
基于aop aspectj的开发 引入相关包:
aspects.jar aop.jar aopalliance.jar aspectj.weaver.jar
恢复转账环境 新建包 con.jdbc.demo3
1.配置事务管理器
2.配置事务的增强
3.将增强应用到目标类(aop的配置方式)
②注解方式声明事务管理
恢复转账环境 新建包 con.jdbc.demo4
1.配置事务管理器
2.开启注解事务
3.在业务层上添加注解
继承 JdbcDaoSupport
JdbcDaoSupport中默认创建了jdbc模板和传入dataSource所以 在配置DAo时直接继承JdbcDaoSupport在配置文件中配置dataSource!
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}