itcast-spring
黑马2014 spring后期 ssh整合后期 讲解不清楚 源码讲解太多 spring重新开始 itcast2016版本
介绍
Spring搭建
约束引入注意事项
导入至eclipse:windows-preference-cata-导入 spring-framework-4.2.4.RELEASE-scheme-beans-最新的版本
新建xml文件, <beans>--edit namespace- 添加xsi
添加cata刚才的添加的scheme
Spring 概念
Ioc di
applicationContext&BeanFactory
spring配置详解
bean元素
spring与strut2结合 scope选择多例
bean init-method属性 方法与对应class中的方法对应
factory-method
需要配置2个bean factory-bean属性 factory-method
spring属性注入
index type value 定义参数
基于其他bean的注入
导包 4核心+2日志+1web整合
监听器(设置监听器 指定路径) 让applicationContext 随着servletContext启动而启动, 在servletContext(application)启动时候,创建applicationContext存储在servletContext(application)域中, 因此获得servletContext(application)就能获得applicationContext ,然后getBean
使用注解配置spring
命名空间 前缀需要
spring中的aop
结论概念:动态代理代理对象和目标对象实现了同个接口 cglib代理对象继承了目标对象
手动使用jdk代理 观光代码
package cn.itcast.service; public interface UserService { void save(); void delete(); void update(); void find(); }
package cn.itcast.service; public class UserServiceImpl implements UserService{ public void save() { System.out.println("save user"); } public void delete() { System.out.println("delete user"); } public void update() { System.out.println("update user"); } public void find() { System.out.println("find user"); } }
package cn.itcast.c_proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import cn.itcast.service.UserService; import cn.itcast.service.UserServiceImpl; public class UserServiceProxyFactory implements InvocationHandler{ private UserService us; public UserServiceProxyFactory(UserService us) { super(); this.us = us; } public UserService getUserServiceProxy(){ UserService usProxy = (UserService) Proxy.newProxyInstance(UserServiceProxyFactory.class.getClassLoader(), UserServiceImpl.class.getInterfaces(), this); return usProxy; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("打开事务"); Object invoke = method.invoke(us, args); System.out.println("关闭事务"); return invoke; } }
package cn.itcast.c_proxy; import org.junit.Test; import cn.itcast.service.UserService; import cn.itcast.service.UserServiceImpl; public class Demo { @Test public void fun1(){ UserService us =new UserServiceImpl(); UserServiceProxyFactory userServiceProxyFactory = new UserServiceProxyFactory(us); UserService userServiceProxy = userServiceProxyFactory.getUserServiceProxy(); userServiceProxy.save(); } }
手动使用cglib代理(了解)
环绕通知唯一特殊 控制目标方法的调用 需要参数
把myadvice通知的save方法织入到切点pc中
pointcut注解 可以解决重复execution
spring整合jdbc
省略掉注入jdbcTemplate , jdbcDaoSuport 有set DataSource方法
注意加前缀 可能有关键字冲突
spring 中aop事务
业务方法之间 平行调用 决定业务方法之间调用,事务应该如何处理
1 haha如有有事务,hiahia就直接使用haha的事务 ,同在一个事务中 haha如有没有事务,hiahia就开一个事务 99%的情况(默认)
2. 如有有事务就使用 没有就算了
3.如有有事务就使用 没有就抛异常
编码式了解
相当于spring aop中把通知部分 由原来的 手写通知类 在applicationContext.xml中通过tx:advice配置完成 spring事务效果相当于 spring-aop中的环绕通知
少了个步骤需要导入transactionManager spring中操作事务的核心 依赖DataSource
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"></bean>
事务通知配置事务管理类和事务属性
transaction-manager="transactionManager" 引入Spring事务管理类
name=save 目标方法 isolation="DEFAULT" propagation="REQUIRED" read-only="false" 事务属性