Spring核心知识(IOC/DI、AOP)
来源:互联网 发布:力鼎软件 编辑:程序博客网 时间:2024/05/17 17:16
Spring核心知识
Ioc/Di
1、概念
容器反转资源的获取方向,主动地管理各个组件的生命周期以及组件之间的依赖关系。
2、实现
实际上容器主要使用了用反射技术。
Map<String,Object> beanMap = new ConcurrentHashMap<>();beanMap.put( beanDefinition.getId(), Class.forName(beanDefinition.getClassName()).newInstance(););
大体流程:
第一步:定位资源(Xml、Annotation),指的是BeanDefinition的资源定位。
第二步:载入BeanDefinition,将资源转换为容器内部数据结构(BeanDefinition)。
第三步:注册BeanDefinition,将载入过程中解析到的BeanDefinition向容器进行注册。实际上容器将BeanDefinition注入到了一个ConcurrentHashMap中去。
具体实现:
第一步>>>定位资源
由用户传入资源的路径,容器解析并设置解析后资源路径。这一步比较简单,大家可以看看源码。
第二部>>>载入BeanDefinition
找到XmlBeanDefinitionReader,发现具体的实现在父抽象类AbstractBeanDefinitionReader里面。
发现载入资源的代码实现。
第三步>>>注册BeanDefinition
找到BeanDefinitionRegistry,发现具体的实现在实现类DefaultListableBeanFactory里面。
发现容器的确是由一个ConcurrentHashMap存储BeanDefinition。
注入BeanDefinition的实现方法,业务比较复杂,可以忽略。
获取BeanDefinition的实现方法。
Aop
1、概念
静态代理:编译阶段生成代理类, 实现方式有:AspectJ 。
动态代理:运行时生成代理类,实现方式有:Proxy、Cglib。
而Spring使用的是Proxy和Cglib的动态代理实现Aop。
2、实现:
Proxy实现
Proxy.newProxyInstance( object.getClass().getClassLoader(), object.getClass().getInterfaces(), new InvocationHandler(){ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return null; } });
Cglib实现
Enhancer enhancer = new Enhancer();enhancer.setSuperClass(object.getClass());enhancer.setCallback( new MethodInterceptor(){ public Object intercept( Object proxy, Method method, Object[] args, MethodProxy methodProxy ) throws Throwable { return null; } });enhancer.create();
3、区别:
Proxy:基于Jdk反射机制,生成Proxy的子类,并实现被代理对象的接口。
Cglib:基于字节码处理框架Asm,生成被代理对象的子类。
阅读全文
0 0
- Spring核心知识(IOC/DI、AOP)
- spring IOC,DI,AOP
- Spring核心 IOC DI
- Spring 核心 Ioc(DI)
- Spring核心概念理解-IoC容器、DI、AOP
- Spring基础知识-IOC、DI、AOP
- spring的IOC 、DI、AOP
- spring中的IOC、DI、AOP
- Spring 核心DI, AOP简介
- (四)Spring核心思想 - IOC与DI
- spring IOC AOP DI的理解
- Spring IOC、DI、AOP原理和实现
- Spring核心技术阐述(IOC、DI、AOP)
- Spring中IOC, DI, AOP解释
- Spring核心技术阐述(IOC、DI、AOP)
- Spring IOC、DI、AOP原理和实现
- Spring的IoC DI和AOP理解
- Spring IOC、DI、AOP原理和实现
- SpringMVC原理 以及dispatchServlet详解
- CDH更改Zookeeper日志路径报错
- [USACO07OPEN]城市的地平线City Horizon——优先队列
- (一)关于网络传输中的加密和加签的问题
- Java调用WEBSERVICE接口实现天气预报和获得国内手机号码归属地省份、地区和手机卡类型信息
- Spring核心知识(IOC/DI、AOP)
- 红包小程序
- NOIP2017复习题(dfs序)
- 安卓开发小记1
- [NOIP模拟][数学]Fibonacci
- Java 9 新特性快速预览
- Snackbar的简单使用
- IP数据报格式及如何判断报文类型
- [2017.10.21-22]多态&抽象类&接口