spring2

1jdk动态代理模式的好处
1在这里不需要写代理对象,因为是动态生成
2拦截器在invoke中采用method.invoke这样的机制让拦截器的重要性更强了
3很好的做到了事物和crud操作的松耦合


2AOP概念
1切面:事物


2通知:事物中的方法


3连接点 客户端调用那个方法那个方法就是


4 切入点


5织入:形成代理方法的过程


6通知+目标方法:代理对象的方法体 
7连接点:目标方法或代理方法的一个子集




3aop的意思

4jdkproxy 与cglibproxy
1相同点 都能完成相同的功能
2不同点
jdkproxy 地阿里对象和目标对象实现共同的接口
cglibproxy 代理对象是目标对象的子类
javassit技术也能产生代理对象




5切入点表达式:确定目标类 id表示 expression切入点表达式



//前置通知  在目标方法执行之前 
pointcut-ref 指向切入点表达式









6 在spring的aop中,特别是在配置文件中,Spring容器要做的事情
1实例化目标类和切面
2Spring容器解析aop:config配置
解析切入点表达式expression
及时把目标类的确定,解析出切入点表达式和Spring容器中的bean按照类型进行匹配
如果成功,则为该类创建代理对象
3创建代理对象的方法体的过程叫做织入:目标方法和通知就结合在一起
代理对象的方法体的内容:
1前置通知 2目标方法 3后置通知






7 SpringAOP各种通知
aop实现了通知和目标方法的松耦合
最终通知(必须执行的通知,目标方法报错也会执行)


异常通知 获取目标方法抛出的异常


环绕通知1在目标方法的上下文添加代码  2控制目标方法的执行  3必须显示的调用目标方法才能执行
环绕通知特点:


8通知类型
1前置通知
1在目标方法执行前
2在前置通知中有个参数JoinPoin:可以获取连接点的一些信息
目标类 参数 方法名称
3应用
事物的开启
2日志
2后置通知
1在目标方法执行后执行
2方法中有一个参数JoinPoint
3如果目标方法抛出异常,则不执行
4可以获取目标方法的反悔值returning
5前置通知后置通知能在目标方法的上下文添加代码
3环绕通知
1在该通知中必须显示调用目标方法,如果不调用则不执行
2joinPoint.prooceed();可以调用目标方法
3控制目标方法的执行
4可以获取目标方法的一些信息
4异常通知
获取目标方法抛出的异常
5最终通知
无论目标方法有误异常都将执行










9spring容器会根据目标类有没有实现接口自动判断选择哪个代理模式
如果目标类实现了接口,则采用jdkproxy
如果目标类没有实现接口,则采用cglibProxy
2如果切入点表达式写的不对(在spring容器中找不到对应的类)会报错,如果切入点表达式写的类和客户端getBean获取的类不一样,则客户端会得到该类原来的形式(得不到代理类)



你可能感兴趣的:(Spring)