@@ -188,75 +188,112 @@ http://www.blogjava.net/crazycy/archive/2006/07/03/56387.html
188188
189189## 1. Spring IOC、AOP的理解、实现的原理,以及优点 【蚂蚁金服面经】
190190
191+ spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分
192+
191193### IOC
192194
193195- ** 我的理解**
194196 - 正常的情况下,比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
195197 - 通过控制反转,把对象的创建不是通过new方式实现,而是交给Spring配置创建类对象
198+ - IOC的意思是控件反转也就是由容器控制程序之间的关系,这也是spring的优点所在,把控件权交给了外部容器,之前的写法,由程序代码直接操控,而现在控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。换句话说之前用new的方式获取对象,现在由spring给你至于怎么给你就是di了。
196199
197200
198201
199202- ** Spring IOC实现原理**
200203
204+ - 创建xml配置文件,配置要创建的对象类
205+
201206 - 通过反射创建实例;
202207 - 获取需要注入的接口实现类并将其赋值给该接口。
203208
204209
205210
206211- ** 优点**
207212
213+ - 解耦合,开发更方便组织分工
214+ - 高层不依赖于底层(依赖倒置)
215+ - 是应用更容易测试
216+
217+ - 因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨
218+
208219
209220
210221### AOP
211222
212223- ** 我的理解**
213224
214- - AOP(Aspect-Oriented Programming)指一种程序设计范型,该范型以一种称为切面(aspect)的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象、类或方法中的横切关注点(crosscutting concern)。
215- - "横切关注"是会影响到整个应用程序的关注功能,它跟正常的业务逻辑是正交的,没有必然的联系,但是几乎所有的业务逻辑都会涉及到这些关注功能。通常,事务、日志、安全性等关注就是应用中的横切关注功能。
225+ - AOP(Aspect Oriented Programming )称为面向切面编程,扩展功能不是修改源代码实现,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。
226+ - 面向切面编程(aop)是对面向对象编程(oop)的补充
227+ - 面向切面编程提供声明式事务管理
228+ - AOP就是典型的代理模式的体现
216229
217230
218231
219232- ** Spring AOP实现原理**
220233
221- - 动态代理(利用反射和动态编译将代理模式变成动态的)
222- - JDK的动态代理
234+ - 动态代理(利用** 反射和动态编译** 将代理模式变成动态的)
235+
236+ - JDK的动态代理
237+
238+ - JDK内置的Proxy动态代理可以在运行时动态生成字节码,而没必要针对每个类编写代理类
223239 - JDKProxy返回动态代理类,是目标类所实现接口的另一个实现版本,它实现了对目标类的代理(如同UserDAOProxy与UserDAOImp的关系)
240+
224241 - cglib动态代理
225242 - CGLibProxy返回的动态代理类,则是目标代理类的一个子类(代理类扩展了UserDaoImpl类)
243+ - cglib继承被代理的类,重写方法,织入通知,动态生成字节码并运行
226244
227-
245+
228246
229247- ** 优点**
248+ - 各个步骤之间的良好隔离性
249+ - 源代码无关性
250+
251+
252+
253+ ## 2. Spring 的优点有哪些
254+
255+ 1 . 降低了组件之间的耦合性 ,实现了软件各层之间的解耦
256+
257+ 2 . 可以使用容易提供的众多服务,如事务管理,消息服务等
258+
259+ 3 . 容器提供单例模式支持
230260
261+ 4 . 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
231262
263+ 5 . 容器提供了众多的辅助类,能加快应用的开发
232264
265+ 6 . spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
233266
267+ 7 . spring属于低侵入式设计,代码的污染极低
234268
235- ## 2. 介绍spring的IOC和AOP,分别如何实现(反射、动态代理)
269+ 8 . 独立于各种应用服务器
236270
271+ 9 . spring的DI机制降低了业务对象替换的复杂性
237272
273+ 10 . Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
238274
239275
240276
241277## 3. 什么是依赖注入,注入的方式有哪些
242278
243- - ** DI **
279+ - DI(依赖注入)
244280 - 所谓依赖注入,就是把底层类作为参数传入上层类,实现上层类对下层类的控制。DI依赖注入,向类里面属性注入值 ,依赖注入不能单独存在,需要在IOC基础上完成操作。
245281- - 使用set方法注入
246282 - 使用有参构造注入
247283 - 使用接口注入
284+ - 注解注入(@Autowire )
248285
249286
250287
288+ ## 4. Spring IOC初始化过程
251289
252290
253291
254292
255- ## 5. Spring IOC初始化过程
256293
257294
258295
259- ## 6 . Spring初始化哪个方法
296+ ## 5 . Spring初始化哪个方法
260297
261298
262299
0 commit comments