您的位置:首页 > 其它

关于动态代理给出自己的一些简单的理解,通俗一点点吧想了两三天才理顺

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),第一个参数和目标类(被代理类)用同一个加载器,第二个参数和目标类(被代理类)用同一个接口,所以就相当于创建了一个新的和目标类同一个接口的类了嘛。
个人见解洗洗再喷,欢迎一起交流,谢谢您的观看,再见。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: