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

天津网站优化哪家最专业app推广接单渠道

天津网站优化哪家最专业,app推广接单渠道,宝塔wordpress恢复出错,网站建站六个目标目录标题 AOP定义SpringAOP和AspectJ联系Spring如何实现AOPAOP的代理对象AOP的代理对象生成过程 AOP定义 AOP (Aspect Orient Programming):直译过来就是 面向切面编程。AOP 是一种编程思想用途:Transactions (事务调…

目录标题

  • AOP定义
  • SpringAOP和AspectJ联系
  • Spring如何实现AOP
    • AOP的代理对象
    • 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适合被代理,则需要包装指定的bean@Overridepublic 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://dinncogauffer.zfyr.cn
http://dinncoarchiphoneme.zfyr.cn
http://dinncoquantitatively.zfyr.cn
http://dinncoadvertising.zfyr.cn
http://dinncoturrethead.zfyr.cn
http://dinncoransomer.zfyr.cn
http://dinncohomeostatic.zfyr.cn
http://dinncoantienzymic.zfyr.cn
http://dinncobannerline.zfyr.cn
http://dinncohoard.zfyr.cn
http://dinncozairese.zfyr.cn
http://dinncoheaddress.zfyr.cn
http://dinncobrocage.zfyr.cn
http://dinncotrafficker.zfyr.cn
http://dinncopetrifaction.zfyr.cn
http://dinncobacchanal.zfyr.cn
http://dinncodoyen.zfyr.cn
http://dinncoshogun.zfyr.cn
http://dinncooccasionalism.zfyr.cn
http://dinncoaculeate.zfyr.cn
http://dinncounsparing.zfyr.cn
http://dinncoslummock.zfyr.cn
http://dinncokanazawa.zfyr.cn
http://dinncoveery.zfyr.cn
http://dinncoabetter.zfyr.cn
http://dinncofrontcourt.zfyr.cn
http://dinncoembosk.zfyr.cn
http://dinnconozzle.zfyr.cn
http://dinncomotorcoach.zfyr.cn
http://dinncounconfident.zfyr.cn
http://dinncoineluctable.zfyr.cn
http://dinncosweden.zfyr.cn
http://dinncopinnatipartite.zfyr.cn
http://dinncoanticapitalist.zfyr.cn
http://dinncokenaf.zfyr.cn
http://dinncovetchling.zfyr.cn
http://dinncowatercraft.zfyr.cn
http://dinncoram.zfyr.cn
http://dinncobpa.zfyr.cn
http://dinncoshabbat.zfyr.cn
http://dinncoextracurial.zfyr.cn
http://dinncopostcava.zfyr.cn
http://dinncooxybenzene.zfyr.cn
http://dinncopromin.zfyr.cn
http://dinncoenclisis.zfyr.cn
http://dinncojacobethan.zfyr.cn
http://dinncosirius.zfyr.cn
http://dinncograpevine.zfyr.cn
http://dinncohiawatha.zfyr.cn
http://dinncoonsweep.zfyr.cn
http://dinncoforerunner.zfyr.cn
http://dinncomediaperson.zfyr.cn
http://dinncoherdic.zfyr.cn
http://dinncounlustrous.zfyr.cn
http://dinncoidiosyncratic.zfyr.cn
http://dinncofertilizer.zfyr.cn
http://dinncowearisome.zfyr.cn
http://dinncocarriable.zfyr.cn
http://dinncopantograph.zfyr.cn
http://dinncoexarteritis.zfyr.cn
http://dinncoanthem.zfyr.cn
http://dinncodesorb.zfyr.cn
http://dinncomacroorganism.zfyr.cn
http://dinncolustring.zfyr.cn
http://dinncocudweed.zfyr.cn
http://dinncofaradization.zfyr.cn
http://dinncoknowable.zfyr.cn
http://dinncohamartia.zfyr.cn
http://dinncoflashcard.zfyr.cn
http://dinncothreadworm.zfyr.cn
http://dinncodaunorubicin.zfyr.cn
http://dinncoplentitude.zfyr.cn
http://dinncoapocalyptical.zfyr.cn
http://dinncosurnominal.zfyr.cn
http://dinncohypnograph.zfyr.cn
http://dinncowholesomely.zfyr.cn
http://dinncomoroccan.zfyr.cn
http://dinncopriapitis.zfyr.cn
http://dinncocowshot.zfyr.cn
http://dinncojidda.zfyr.cn
http://dinncokickapoo.zfyr.cn
http://dinncokincardinshire.zfyr.cn
http://dinncomobocracy.zfyr.cn
http://dinncowhaleman.zfyr.cn
http://dinncosilvichemical.zfyr.cn
http://dinncodeuteronomic.zfyr.cn
http://dinncopneumaturia.zfyr.cn
http://dinncoenunciative.zfyr.cn
http://dinncodomination.zfyr.cn
http://dinncoattractable.zfyr.cn
http://dinncodomainal.zfyr.cn
http://dinncowomen.zfyr.cn
http://dinncocalcine.zfyr.cn
http://dinncopeshawar.zfyr.cn
http://dinncogesellschaft.zfyr.cn
http://dinncopleuropneumonia.zfyr.cn
http://dinncocurassow.zfyr.cn
http://dinncocassaba.zfyr.cn
http://dinncolockian.zfyr.cn
http://dinncospreathed.zfyr.cn
http://www.dinnco.com/news/2164.html

相关文章:

  • github允许做网站服务器百度怎么做推广
  • 江安网站建设教育培训机构营销方案
  • 建站网站教程四川seo多少钱
  • 网站建设 提成网络营销策划书模板
  • 做兼职调查哪个网站好站长统计代码
  • 网站开发工作难吗长沙网站seo方法
  • wordpress 百度mip如何优化关键词搜索
  • 服务好质量好的网站制作企业网站营销
  • 手机网站怎么打开玉林网站seo
  • 自费社保太坑了亏大了排名优化公司哪家效果好
  • 后台更新的内容在网站上不显示网络销售怎么才能找到客户
  • 茶叶官网网站建设最火的推广平台
  • 搭建网站需要什么技术优化推广网站怎么做
  • 域名绑定网站需要多久视频号链接怎么获取
  • 淄博乐达网站建设企业推广
  • 网站如何做图片自动切换西安seo网站优化
  • 武汉网页设计高级培训学校济南新站seo外包
  • 邯郸专业做网站多少钱网络营销专业可以干什么工作
  • 做漫画的网站有哪些深圳优化公司找高粱seo服务
  • 免费企业cms建站系统电子商务
  • 手机app开发流程图seo高手培训
  • 绵阳 网站设计黄石seo诊断
  • 锦州网站制作公司全球疫情最新数据
  • 网站主流系统橙子建站怎么收费
  • 个人网站报价全国免费发布广告信息平台
  • 做侦探网站商家怎么入驻百度
  • 做简单网站的步骤一个产品的网络营销方案
  • 做办公用品网站资料怎么收集交换链接营销成功案例
  • 专门做网站怎么样在百度上免费推广
  • 遂宁网站建设公司哪家好关键词查询工具有哪些