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

建设网站公司名称大全网络培训的建议

建设网站公司名称大全,网络培训的建议,咨询公司的成本费用有哪些,教育培训报名上文中:https://blog.csdn.net/qq_26437925/article/details/145241149 大致了解了spring aop的代理的实现,其实就是有个BeanPostProcessor代理了bean对象。 本文直接编写最简单的代码直观感受下 bean A: Service public class A {public A() {System.…

上文中:https://blog.csdn.net/qq_26437925/article/details/145241149 大致了解了spring aop的代理的实现,其实就是有个BeanPostProcessor代理了bean对象。


本文直接编写最简单的代码直观感受下

bean A:

@Service
public class A {public A() {System.out.println("A()");}public void say(){System.out.println("say A");}
}
  • beanPostProcessor
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Service;import java.lang.reflect.Method;@Service
public class ABeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (beanName.equals("a")) {System.out.println("a BeanPostProcessor postProcessAfterInitialization");return getProxy(bean);}return bean;}public Object getProxy(Object targetObject) {Enhancer enhancer = new Enhancer();Class<?> superClass = targetObject.getClass();enhancer.setSuperclass(superClass);MethodInterceptor interceptor = new MethodInterceptor() {@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println("cglib before...");Object res = methodProxy.invokeSuper(o, objects);return res;}};enhancer.setCallback(interceptor);Object targetProxy = enhancer.create();return targetProxy;}
}

基于cglib代理

<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>
  • config类不用EnableAspectJAutoProxy了
@Configuration
@ComponentScan("com.aop.dependency")
public class ConfigOne {
}
  • 测试类
@Test 
public void test() throws Exception {ApplicationContext ctx =new AnnotationConfigApplicationContext(ConfigOne.class);A a = (A) ctx.getBean("a");a.say();((AnnotationConfigApplicationContext) ctx).close();
}

测试输出
在这里插入图片描述

方法执行的代理输出正常

因为Cglib是用父类继承,新增了一个完整的class字节码。所以可以看到A()构造函数执行了两次, 一次是spring bean生命周期的实例化,一次则是Cglib创建出代理对象执行的。

http://www.yayakq.cn/news/959016/

相关文章:

  • 沧州企业网站优化阿里邮箱企业版官网
  • 网站的静态页面谁做忻州网站seo
  • 九江专业制作网站小程序马连洼网站建设
  • 网站建设属于什么资产网络规划设计师教程什么时候出电子版
  • 039 织梦云idc网站源码手机代理网址
  • 模板建站是什么安全又舒适的避孕方法有哪些
  • 新乡彩票网站建设搭建跨境电商平台
  • 中文网站开发软件有口碑的唐山网站建设
  • 网站制作哪种好哪儿能做网站建设
  • 专业网站设计报价类似wordpress的平台
  • 宁德市建设局网站wordpress顶部通知栏
  • 广告商网站建设手机端网页设计尺寸规范
  • 访问国外的网站很慢建设网站费
  • 图标设计网站装修公司网站
  • 医院网站主页面设计前端网站开发上线的流程
  • 网站优化公司seo案例网站专题页面
  • asp 网站访问统计上海市建设安全协会网站一360
  • 怎样设计一个移动网站上海八号桥 网站建设
  • 做购物网站的数据库设计网站推荐国外
  • 洪湖自己的网站做哪个视频网站赚钱的
  • 网站开发商业秘密保密协议浙江建设信息港网站查询
  • 网站备案查询工信部官网海口网站开发师招聘
  • 如何建设与维护网站软件工程师培训机构排名
  • 机械建设网站制作湖南建设网站官网
  • wordpress删除数据库汕头seo外包
  • 定制家具网站源代码如何申请我的网站
  • 书吧网站设计论文网站如何做谷歌优化
  • 很长的网站域名怎么做短时代设计网 新网站
  • 什么值得买网站模板有没有做高仿手表的网站
  • 企业内部信息网站如何建设荣成市信用建设官方网站