18.01.24,web学习第四十五天,还有半年,努力吧青年 Spring第三天 aop事务配置+Spring整合jdbc操作
45.Spring第三天
1.复习 aspect:方面
1)注解代替xml配置 导包4+2+aop包 导入context约束,在xml开启扫描包中类的注解。 注解: @component(“”) @scope(“”) @value(“”) @AutoWired自动属性注入,根据类型注入 @Qulifiler指定注入的对象的名称 @Resource指定对象的名称注入 @postConstract初始化方法 @preDestroy销毁方法 2)Spring aop开发 封装了动态代理技术,来体现aop Cglib对目标对象继承代理。 3)Spring aop 名词 Join point :连接点,所有可以织入通知的方法。 Point cut:切入点,需要|已经织入通知的方法 Advice:需要增强的代码 Weaving:将通知应用的切点的过程 Target:目标对象、 Proxy:代理对象 aspect:切面,切入点+通知、 4)aop步骤 导包:4+2+aop+aspect 准备目标对象+通知类 前置通知 后置通知 环绕通知 异常拦截通知 后置通知无论如何都执行 5. 配置文件中配置,导入aop约束。 1)目标对象 2)通知对象 3)<aop:config> <aop:point-cut id=”切点名称” expression=”execution(切点表达式)”/> <aop:aspect ref=”通知对象名称”> <aop:before method=”” pointcut-ref =””> <aop:after-returning method=”” pointcut-ref=””> <aop:around method=”” pointcut-ref=””> <aop:after-throwing method=”” pointcut-ref=””> <aop:after method=”” pointcut-ref=””> </aop:aspect> </aop:config> 6. 使用注解完成aop 1)导包 4+2 aop+aspect aop联盟+weaving 2)准备目标对象 3)准备通知类 4)配置文件中配置,导入aop约束 1目标对象 2 通知对象 3 <aop:aspect-autoproxy>开启注解aop 5)@aspect 指定当前为通知类 @before 前置通知 @after-returnning 后置通知 @around 环绕通知 @after-throwing 异常拦截通知方法 @after 后置通知方法 6)@pointCut 抽取切点表达式
|
2. 使用注解代替配置aop 略
3. Spring整合jdbc
Spring中提供了一个可以操作数据库的对象,对象封装了jdbc技术。 1)jdbcTemplate JDBC模板对象(高度相似于DButils的QueryRunner) 2)准备:导包4+2,spring-test+spring-aop(junit测试),c3p0连接池+jdbc驱动,spring-jdbc(模板包)+spring-tx(事务包)包。 测试: CombopooledDataSource cpds= New ComboPooledDataSource(); cpds.setDriverClass(“com.mysql.jdbc.Driver”); cpds.setjdbcURL(“jdbc:mysql:///wly”); cpds.setUser(“root”); cpds.setPassword(“root”); JdbcTemplate jt=new JdbcTemplate(); jt.setDataSource(cpds); Jt.execute(sql); |
4.Spring jdbcTemplate的用法
1)当查询返回为值类型,如数量可使用: String sql=”select count(*) from user”; Integer count=jt.queryForObject(sql,Integer.class); 2)当查询单个对象时: String sql=”select ”; 3)当查询很多个对象时: String sql=”select * from user”; List<User> list=jt.query(sql,new RowMapper<User>(){ @overried Public User mapRow(ResultSet rs,int arg1){ USer u=new User(); u.setId(rs.getInt(“id”)); u.setName(rs.getString(“name”)); return u; } }); 4)向数据库插入数据、删除数据、更改数据: Jt.update(sql,uuser.getName()); 均是update方法。 |
5. 整合连接池&JDBC模板&Dao配置到spring容器
1)将连接池放入Spring容器
2)将jdbcTemplate放入jdbc容器
3)将USerDao放入jdbc容器 UserDao是那个需要Template进行数据库操作的类。
|
6. 对于5 的扩展
操作类中jdbcTemplate可以不new可以此操作类继承jdbcDaoSupport。 此类方法中用到的jc均被super.getJdbcTempLate()得到、。 配置文件更改: 不需要将jdbcTemplate注入到容器了,直接UserDao类属性关联数据源dataSource即可。
|
7. 读取properties内配置的连接池
有时候需要将配置文件中配置的连接池配置到单独的properties中。 在properties中写键值对有一个经验问题:
有可能键名和关键词重复导致读不出来:所以加前缀。。。
|
8. String中的aop事务
1)Spring封装了管理事务的代码:打开事务,提交事务,回滚事务 事务操作对象:因为在不同平台,操作事务的代码不同,Spring提供了一个接口:PlatformTransactionManager:平台事务管理器。 在不同的平台使用不同的实现类: JDBCTransactionManager HibernateTransactionManager 注意:在spring中玩事务管理,最为核心的对象是TransactionManager对象。 2)Spring管理事务的属性的介绍: 事务传播行为:比如a()方法调用b()方法。 事务传播行为决定业务方法之间调用,事务应该如何处理。使用默认 Propagation_required 支持当前事务,如果不存在,就创建一个(默认)。其它都扯淡 3)是否只读!
|
9. 演示Spring aop的事务操作
1)银行转账演示 2)spring配置事务 抽取 编码式 略 |
Xml配置事务aop(aop): Spring为我们提供了事务通知。我们只需要配置即可。 1)导包:aop+aspect+aop联盟+weaving织入包。 2)导入约束(命名空间)tx约束 之前导过beans,context,aop这事第四个。其实一共需要导入四个约束: Beans是最基本的(那个bean元素) context:注解+读取properties配置文件 aop:配置aop用的,织入目标对象。 tx:配置事务通知的 3)开始配置:前提:有目标对象
|
|
使用注解配置事务aop:
在相应的方法上配置事务(可以配置到类上(所有方法均生效))可以同时配置,就近原则。 |