[读书笔记] 精通Spring 2.x - 企业应用开发详解

本文详细介绍了Spring框架的核心技术,包括IOC容器的工作原理及其内部refresh()方法的具体流程,并通过实例演示了CGLib动态代理如何用于性能监控。


Spring核心技术

IOC容器概述


Spring容器高级主题

Spring容器技术内幕

Spring的 AbstractApplicationContext 是 AppliactionContext 抽象实现类, refresh()内部的逻辑是
//初始化BeanFactory, getBeanFactory由子类实现,只是把信息装入容器
configurableListableBeanFactory beanFactory = getBeanFactory();

//调用工厂后处理器:根据反射从 BeanDefinitionRegistry 中找出所有 BeanFactoryPostProcessor  类型的Bean,注册到容器Bean 后处理器的注册表中
invokeBeanFactoryPostProcessors();

//初始化信息源, 国际化信息资源
initMessageSource();

//初始化应用上下文事件广播器
initApplicationEventMulticaster();

//初始化特殊Bean,钩子方法,子类用来初始化特殊操作
onRefresh();

//注册事件监听器
registerListeners();

//初始化singleton的Bean
beanFactory.preInstantiateSingletons();

//发布上下问刷新事件,创建上下文刷新事件,事件广播器负责将这些事件广播到每个注册的事件监听器中
publishEvent(new ContextrefreshedEvent(this));


SpringAOP基础

CGLib动态代理

CGLib采用非常低层的字节码技术,可以为一个类创建子类。以下是一个动态切入性能监控的例子
public class CglibProxy implements MethodInteceptor{
  private Enhancer enhancer = new Enhancer();
  public Object getProxy(Class clazz){
    enhancer.setSuperclass(clazz);
    enhancer.setCallback(this);
    return enhancer.create();
  }
  public Object interept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable{
    PerformanceMonitor.begin(obj.getClass().getName()+"."+method.getName());
    Object result = proxy.invokeSuper(obj, args);
    PerformanceMonitor.end();
    return result;
  }
}

我们来测试一下
CglibProxy proxy = new CglibProxy();
ForumServiceImpl impl = (ForumServiceImpl)proxy.getProxy(ForumServiceImpl.class);
forumService.removeForum(10);

//输出
//begin monitor...
//模拟删除Forum记录:10
//end monitor...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值