spring小记

看了马士兵讲的spring实现原理视频,代码部分就不列出来了,只是表达下看完视频后的想法,对一些模糊的概念进行总结

一、概念    

1.Dependency Injection:依赖注入        完成bean与bean之间的依赖关系,通过配置文件中bean id定义的容器,依赖容器中的指定对象完成创建实例
2.Inverse of Control:控制反转       和DI是一个概念 当某个角色(java实例)需要另一个角色的协助,传统程序中由调用者创建被调用者的实例,但通过spring,创建被调用者的工作可以由容器(spring)来完成,直接通过配置XML完成注入调用者3.AOP  aspect orient programming:面向切面编程(也是面向方法编程)          用于处理系统中分布于各个模块中的交叉关注点(方法)而不影响原来的代码。如日志、安全检查、对象池管理,通过spring的配置文件实现动态代理(参考设计模块中代理模式)。
DI原理:通过(类似DOM4J、JDOM等)读取xml配置文件格式获取信息,将获取的信息配合反射实现代码中对象new的替换,通过容器控制对象之间的依赖关系完成创建对象需要的实例。
AOP原理:参考动态代理实现原理
     在程序运行时,创建代理类的XX.class(complitor、gclib、asc等多种方式实现),并通过反射机制加载调用其接口的方法。
          1.通过jdk自带的reflect.proxy实现
              Proxy.newProxyInstance(实现类.getclass().getclassloader(),实现类.getclass.getinterfaces().代理类对象)
             这个方法完成如下工作:
              a.根据传入的第二个参数interface动态生成一个类,实现了interface中的接口,并且继承了Proxy类重写了hashcode,toString等方法
              b.通过传入的第一个参数classloder将刚生成的类加载到jvm中
              c.利用第三个参数调用代理的构造函数创建代理的对象
              d.将代理生成的实例返回给客户端
          2.上述代理的实现过程通过jdk1.6的包中complitor实现 (见马士兵代理模式) (1).生成代理类的.java文件   (2)自动编译成.class   (3)反射加载.class  (4)调用接口委托类的方法

相关推荐