Spring AOP之动态代理方式
一、基础概念
AOP:把一个类当中不重要的部分拆出去,做成一个切面,然后在用的时候把切面加上去
代理:(为方便理解,直接举例)Java的虚拟机其实就是一种代理
二、传统的使用方法
1、创建代理类
implements InvocationHandler
2、传入要代理的对象
可以以构造方法把需要代理的类传进来
3、实现接口的抽象方法invoke(被代理的对象的方法其实都在invoke方法中被运行)
添加需要的内容
如果不想每个被代理的都强加代码,可以加上条件判断
如:
4、进行绑定(在要使用的类中),之后即可使用
效果:
三、Spring-aop的使用方法(简化版,但还是传统的线型方式)
1、导入aop依赖包
2、创建代理类
根据要添加的切面/建议/通知,自行选择implements的接口,以下以后置建议:
AfterReturningAdvice为例
3、进行配置,建立联系
<bean id="accountDAO" class="org.csu.spring.demo.aop.persistence.AccountDAOImpl"/><bean id="demoProxy" class="org.csu.spring.demo.aop.proxy.SpringAOPProxyDemo"/><bean id="demoAfterProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="target" ref="accountDAO"/><property name="interceptorNames" value="demoProxy"/><property name="proxyInterfaces" value="org.csu.spring.demo.aop.persistence.AccountDAO"/></bean>
bean的id自定义,但要唯一
class是类的路径
代理是由Spring的工厂进行(这里代替了“二”中的“4”)
(name是固定的,记住就好)
4、在测试类中进行使用
出现的问题:(要仔细看错误信息!!!)
(1)
结果:org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.csu.spring.demo.aop.test.Demo': Unsatisfied dependency expressed through field 'accountDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.csu.spring.demo.ioc.persistence.AccountDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
原因:导包导错了,ioc和aop中都有AccountDAO这个类,应该导入aop包中的类,却导成了ioc。。。
解决:改一下导入的包就ok
(2)
结果:没有出现后置建议
原因:
自动注入是按类型搜索的,所以注入的其实是未代理前的对象
解决:将自动注入改成@Resource(name = “ ”),即:
其中,name的值为代理后的对象,对应于配置文件中的
最终效果:
Spring AOP之动态代理方式相关推荐
- SpringBoot/Spring AOP默认动态代理方式
Spring 5.x中AOP默认依旧使用JDK动态代理 SpringBoot 2.x开始,AOP为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB. 在SpringBoot 2.x中, ...
- Spring : Spring Aop CGLIB动态代理调用过程
1.美图 2.概述 CGLIB动态代理参考: CGLIB动态代理 CGLIB原理解析参考:CGLIB原理解析 3.分析 Spring AOP CGLIB动态代理调用过程分析,CGLIB动态代理调用过程 ...
- spring—AOP 的动态代理技术
AOP 的动态代理技术 常用的动态代理技术 JDK 代理 : 基于接口的动态代理技术 cglib 代理:基于父类的动态代理技术 JDK 代理 public class proxy {@Testpubl ...
- Spring : Spring Aop JDK动态代理调用过程
1.美图 2.概述 JDK动态代理参考 : JDK动态代理 3.源码 打开JdkDynamicAopProxy类,查看invoke方法: /*** Implementation of {@code I ...
- Spring AOP编程-aspectJ代理方式选择
1.在spring的aop开发中,它使用的是代理方案,代理实现有两种: 1)jdk的proxy 2)cglib spring框架默认情况下,会对有接口的类使用proxy代理.没有接口的类使用cglib ...
- Spring AOP JDK动态代理报错:class com.sun.proxy.$Proxy0 cannot be cast to class com.aha.Spring5.jdkproxy.
报错时候的书写 public class JDKProxy {public static void main(String[] args) {UserDaoImpl userDao = new Use ...
- 浅谈Spring中JDK动态代理与CGLIB动态代理
前言 Spring是Java程序员基本不可能绕开的一个框架,它的核心思想是IOC(控制反转)和AOP(面向切面编程).在Spring中这两个核心思想都是基于设计模式实现的,IOC思想的实现基于工厂模式 ...
- 【Spring】Spring中AOP解析 上 两种动态代理方式与ProxyFactory代理工厂
1.两种动态代理方式演示 1.1 JDK动态代理 JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程.要求被代理类必须实现一个接口 . 如下案 ...
- spring 的AOP和动态代理分析
spring的AOP到底是什么呢? 看看百度怎么说 AOP(Aspect Oriented Programming 面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...
- Spring 初识Aop JDK动态代理实现 原理初显
Spring 初识Aop JDK动态代理实现 原理初显 一.项目结构 二.具体步骤: 1.创建maven项目 创建好包结构 2.写一个TestDao接口 及实现类 3. 写一个自己的切面类 4.jav ...
最新文章
- delphi 保存数据到sql_介绍一款免费好用的可视化数据库管理工具
- 详解停车位检测算法 Vision-Based Parking-Slot Detection: A DCNN-Based Approach and a Large-Scale Benchmark
- Ionic生命周期与注意点
- 常用的开源中文分词工具
- 博文视点程序员读书节,大咖带你共读十日精彩
- houdini 体积
- java 抽象类命名_Java命名规范
- python实列pdf下载_Python程序实例解析.pdf
- 天池大数据竞赛口碑商家客流量预测——时序预测(python-numpy-arima)
- HDU 4512 吉哥系列故事——完美队形I(最长公共上升子序列 LCIS)
- JPG图像太大怎么免费压缩
- Java Stream来写算法01——自幂数(水仙花数)
- 【openh264】编码器 编码 SPS NALU 的流程
- Day4 自定义控件/ListView/RecyclerView
- 如何在Outlook中创建自定义导航窗格
- Axure RP 8.1下载 +汉化
- Java购买火车票(初识并发)
- MP4 转换为 MP3 的工具
- 高效文本编辑的七种武器
- 猴子吃桃 (洛谷P5743)← 递推法