当前位置: 首页 > news >正文

工业和信息化部网站备案管理系统一家专做灯的网站招聘

工业和信息化部网站备案管理系统,一家专做灯的网站招聘,备案号 不放在网站上,网站关键词排名忽然目录标题 AOP定义SpringAOP和AspectJ联系Spring如何实现AOPAOP的代理对象AOP的代理对象生成过程 AOP定义 AOP #xff08;Aspect Orient Programming#xff09;#xff1a;直译过来就是 面向切面编程。AOP 是一种编程思想用途#xff1a;Transactions #xff08;事务调… 目录标题 AOP定义SpringAOP和AspectJ联系Spring如何实现AOPAOP的代理对象AOP的代理对象生成过程 AOP定义 AOP Aspect Orient Programming直译过来就是 面向切面编程。AOP 是一种编程思想用途Transactions 事务调用方法前开启事务 调用方法后提交关闭事务 、日志、性能监控方法运行时间、权限控制等。也就是对业务方法做了增强 SpringAOP和AspectJ联系 Spring AOP旨在通过Spring IoC提供一个简单的AOP实现以解决编码人员面临的最常出现的问题。这并不是完整的AOP解决方案它只能用于Spring容器管理的beans。AspectJ是最原始的AOP实现技术提供了完整的AOP解决方案。 简单的spirng aop够用了但是spring aop借助了aspectj的注解功能需要添加aspectj的依赖。在高级点比如切面很多上万个这是就要用到aspectj的高级功能了 在Spring的框架中包含Aspectj当然也包括Spring AOP在进行开发时候这两个框架是完全兼容的区别 AspectJ使用的是编译期和类加载时进行织入Spring AOP利用的是运行时织入 Spring如何实现AOP AOP的代理对象 都知道AOP是通过代理对象实现对对象功能的增强代理对象分为静态代理和动态代理 静态代理 需要定义接口、目标对象与代理对象代理类需要对代理对象的每个方法有对应方法优点 也就是代理模式的优点可以在被代理方法的执行前或后加入别的代码实现诸如权限及日志的操作不是运行时生成的代理效率更高 缺点 如果代理对象增加一个方法所有代理类也需要实现此方法 动态代理 动态代理类的源码是在程序运行期间由JVM根据反射等机制动态织入的不存在代理类的字节码文件直接进了虚拟机通过proxy提供了一组静态方法来为一组接口动态地生成代理类及其对象。 // 方法 1: 该方法用于获取指定代理对象所关联的调用处理器 static InvocationHandler getInvocationHandler(Object proxy) // 方法 2该方法用于获取关联于指定类装载器和一组接口的动态代理类的类对象 static Class getProxyClass(ClassLoader loader, Class[] interfaces) // 方法 3该方法用于判断指定类对象是否是一个动态代理类 static boolean isProxyClass(Class cl) // 方法 4该方法用于为指定类装载器、一组接口及调用处理器生成动态代理类实例 static Object newProxyInstance(ClassLoader loader, Class[] interfaces,InvocationHandler h)注意newProxyInstance方法,接收的三个参数依次为: ClassLoader loader, :指定当前目标对象使用类加载器 ;负责将类的字节码装载到 Java 虚拟机JVM中并为其定义类对象 Class?[] interfaces, :目标对象实现的接口的类型,使用泛型方式确认类型 InvocationHandler h :事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入 InvocationHandler,这是调用处理器接口它自定义了一个 invoke 方法,在该方法中实现对目标类的代理访问。 public interface InvocationHandler { //第一个参数既是代理类实例 //第二个参数是被调用的方法对象 // 第三个方法是调用参数Object invoke(Object proxy, Method method, Object[] args) }所以实现动态代理我们就需要创造一个类实现InvocationHandler接口并且实现invoke方法 Override public Object invoke(Object object, Method method, Object[] args) throws Throwable { //********************方法前增强*************************** // 反射调用目标方法return method.invoke(obj, args); //********************方法后增强*************************** }首先创建目标对象将对象作为参数传给实现InvocationHandler接口的类的实例对象然后 使用Proxy.newProxyInstance()方法将参数传入进去生成动态代理对象。 优点 相比静态代理动态代理减只需要实现一个接口即可完成而静态代理每次都要实现新加的方法以及维护被代理方法 AOP的代理对象生成过程 在处理循环依赖的时候放入三级缓存的是ObjectFactory一个lambda表达式用来生成bean对象的半成品对象。因为对象可能需要被代理所以所以放入三级缓存的是一个ObjectFactory而不是一个半成品bean。所以AOP的代理是在后置处理器处生成的也就是AbstractAutoProxyCreator实现了BeanPostProcessor接口。 public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupportimplements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {}通过postProcessAfterInitialization方法实现目标对象的动态代理 //如果当前的bean适合被代理则需要包装指定的beanOverridepublic Object postProcessAfterInitialization(Nullable Object bean, String beanName) throws BeansException {if (bean ! null) {// 根据给定的bean的class和name构建一个keyObject cacheKey getCacheKey(bean.getClass(), beanName);if (!this.earlyProxyReferences.contains(cacheKey)) {// 如果当前的bean适合被代理则需要包装指定的beanreturn wrapIfNecessary(bean, beanName, cacheKey);}}return bean;}向下的过程依次是 wrapIfNecessary createProxy proxyFactory.getProxy ProxyCreatorSupport#createAopProxy() 判断是使用JDK代理还是CGLIB代理 上面选择的AopProxy的getProxy方法 Proxy.newProxyInstance 到此代理对象生成之后被放入一级缓存中。
http://www.hkea.cn/news/14501850/

相关文章:

  • seo大神做的网站国外二级域名免费申请
  • 肥西网站推广公司成都哪里好玩适合小孩
  • 唐山网站网站查询域名ip入口
  • 河南企业网站推广公司网页设计业务介绍
  • 网站地址跟网页地址区别域名备案查询最新消息
  • 找设计方案的网站泉州建设网站公司
  • 网站建设技能搜狗站长工具综合查询
  • 自己做qq头像静态的网站企迪网
  • 南京做网站建设的公司哪家好外包公司排名前十
  • 工作室装修网站源码凤山县住房和城乡建设局网站
  • 安乡网站制作wordpress手机版如何在电脑
  • 网站收录入口申请查询网站开发推荐一本书
  • linux网站开发软件金蝶软件官方报价
  • excel 表格 做的网站一站式推广平台
  • 长沙南站建站免费word文档模板下载网站
  • 苍溪网站建设流量精灵app
  • 网站设计说明范文深圳网站公司招聘信息
  • 如何网站建设 需要详细的步骤网站运营学习
  • 怎样用dw做网站主页软件开发工具也称为什么工具
  • 网站推广途径及要点网站开发策划个人简历
  • 网奇e游通旅游网站室内设计联盟官网论坛
  • 上海 国际网站设计佛山网站建设多少钱
  • 静态网站开发步骤网站建设用什么网站好一点
  • 网站建设中服务器搭建方式给帅哥做奴视频网站地址
  • 银川建立网站门户网站功能
  • 惠州地区网站建设公司wordpress图片放大滑动
  • 客户管理系统在哪进入vue做网站对seo
  • 广东官网网站建设平台惠州悦商做网站
  • 现在ui做的比较好的网站海外网站建设平台
  • 东营企业网站制作深圳网站建设前十名