关于动态代理给出自己的一些简单的理解,通俗一点点吧想了两三天才理顺
2017-09-27 12:50
337 查看
关于动态代理的作用和一些实现的方法这里就不一一到来了,只是简单的说一下自己的理解,也希望不怎么理解的朋友能够豁然开朗,虽然这里不能够带你走上人生巅峰,但是还是希望能带你入一下门。
这个mybeanfactory提供一个返回UserServiceImpl代理类的工厂,因为要将目标内UserServiceImpl(需要被代理的类,为什么要代理,请自行百度,好吧,告诉你是因为不希望在被代理的类中注入别的类从而产生依赖关系,达到解耦的目的)和切面类myaspect(一个方法执行前后需要执行的方法,比如事务,性能监控(方法运行时间))相互结合,所以将两类的实例都要注入工厂中,在下面进行结合(不要想歪,这个结合就结合了,回不来分不开的),好了,下面进去正题:
proxy听说是jdk的反射类,反正我是不懂,因为创建的是UserserviceImpl的代理类,所以返回的是UserService的实例(跟被代理的类UserserviceImpl实现同一个接口),有点眉目了没,没错,就是相当于动态的创建了一个实现Userservice接口的类(即代理类),动态的这个类中复写了被代理的类的方法(就是名字一样的方法但里面调用的是invoke方法,即invocationhandler中的invoke方法),通过proxy.newproxyInstance(classload,interfaces,h)方法返回一个实现了UserService的实例proxyservice(代理类对象),并将其返回,从而得到代理的对象,当对象调用方法时直接调用invoke方法,将myaspect的方法和被代理类userserviceImpl的方法在invoke排序就可以了(下面有图),返回执行方法后的对象
下面看一下参数,proxy.proxynewinstance(classload,interfaces,h),第一个参数和目标类(被代理类)用同一个加载器,第二个参数和目标类(被代理类)用同一个接口,所以就相当于创建了一个新的和目标类同一个接口的类了嘛。
个人见解洗洗再喷,欢迎一起交流,谢谢您的观看,再见。
proxy听说是jdk的反射类,反正我是不懂,因为创建的是UserserviceImpl的代理类,所以返回的是UserService的实例(跟被代理的类UserserviceImpl实现同一个接口),有点眉目了没,没错,就是相当于动态的创建了一个实现Userservice接口的类(即代理类),动态的这个类中复写了被代理的类的方法(就是名字一样的方法但里面调用的是invoke方法,即invocationhandler中的invoke方法),通过proxy.newproxyInstance(classload,interfaces,h)方法返回一个实现了UserService的实例proxyservice(代理类对象),并将其返回,从而得到代理的对象,当对象调用方法时直接调用invoke方法,将myaspect的方法和被代理类userserviceImpl的方法在invoke排序就可以了(下面有图),返回执行方法后的对象
下面看一下参数,proxy.proxynewinstance(classload,interfaces,h),第一个参数和目标类(被代理类)用同一个加载器,第二个参数和目标类(被代理类)用同一个接口,所以就相当于创建了一个新的和目标类同一个接口的类了嘛。
个人见解洗洗再喷,欢迎一起交流,谢谢您的观看,再见。
相关文章推荐
- 为自己记----android中关于actionbar的一些简单理解
- 做大神关于js 动态属性的一些见解 暂时没理解 放着以后看
- 2018.1.25 关于KMP算法的一些自己的理解。
- JDK 动态代理的简单理解
- 关于Spring Boot 的一些简单理解和应用
- 知乎上的一个关于线代的通俗简单理解方法写的不错转过来
- 动态代理和cglib的简单理解
- 关于事件与委托的一些个人简单理解
- 关于多态的一些自己理解
- Java新手小白 对动态代理的一些理解
- JDK 动态代理的简单理解
- 关于范式的一些简单理解
- 关于JDK动态代理的理解
- 关于动态网页的一些理解
- 关于一些简单典型的动态规划
- 关于排序的一些自己的理解
- 关于动态表单一些理解
- [置顶] 关于JAVA动态加载类[简单IOC的实现] -- vb2005xu自己动手
- 关于lstm和gru的一些简单资料,讲得比较容易理解
- 关于lua元表和元方法的例子 自己理解了并加了一些注释