spring中基于XML的AOP配置步骤
1.把通知Bean也交给spring管理
2.使用aop:config标签表明AOP的配置
3.使用aop:aspect标签表明配置切面
id属性:是给切面提供一个唯一标识
ref属性:是指定通知类bean的id
4.在aop:aspect标签的内部使用对应标签来配置通知的类型
aop:before :表示配置的前置通知
method属性:用于指定Logger类中哪个方法是前置通知
pointcut属性:用于指定切入点表达式,该表达式的含义指地是对业务层哪些方法经行增强
配置切入点表达式 id属性用于指定表达式唯一标识。 expression属性用于指定表达式内容
环绕通知:
建议结合环绕通知使用
普通使用:
升级版:
bean.xml文件内容
spring中基于XML的声明式事务控制配置步骤 1.配置事务管理器 2.配置事务的通知 此时我们需要导入事务的约束 tx名称空间和约束,同时也需要aop 使用tx:advice标签配置事务通知 属性: id:给事务通知起一个唯一标识 transaction-manager:给事务通知提供一个事务管理器引用 3.配置AOP中的通用切入点表达式 4.建立事务通知和切入点表达式的对应关系 5.配置事务的属性: 是在事务的通知tx:advice标签的内部
spring基于xml的事务声明 ()
spring中基于注解的声明式是位于控制配置步骤 (配置简单,但是需要多次注解) 1.配置事务管理器 2.开启spring对注解事务的支持 3.在需要事务支持的地方使用@Transactional
基于接口的动态代理
动态代理:
特点:字节码随用随创建,随用随加载
作用:不用修改源码的基础上对方法增强
分类:
基于接口的动态代理
基于子类的动态代理
基于接口的动态代理:
涉及的类:Proxy
提供者:JDK官方
如何创建代理对象
使用Proxy类中的newProxyInstance方法
创建代理对象的我要求
被代理类最少实现一个接口,如果没有则不能使用
newProxyInstance方法参数:
Classloader:类加载器
它是用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法。
Class[]:字节码数组
它是用于让代理对象和被代理对象有相同的方法。固定写法
InvocationHandler:用于提供增强的代码
它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下都是匿名内部类,但不是必须的
此接口的实现类都是谁用谁写
update
动态代理:
特点:字节码随用随创建,随用随加载
作用:不用修改源码的基础上对方法增强
分类:
基于接口的动态代理
基于子类的动态代理
基于接口的动态代理:
涉及的类:Enhancer
提供者:第三方cglib库
如何创建代理对象
使用Enhancer类中的create方法
创建代理对象的要求
被代理类不能是最终类
create方法参数:
Class:字节码
它是指定被代理对象的字节码
Callback:用于提供增强的代码
它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下
都是匿名内部类,但不是必须的
此接口的实现类都是谁用谁写
我们一般写的都是该接口的子接口实现类:MethodInterceptor
Callback:用于提供增强的代码
它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下
都是匿名内部类,但不是必须的
此接口的实现类都是谁用谁写
我们一般写的都是该接口的子接口实现类:MethodInterceptor