欢迎来到天天文库
浏览记录
ID:11417339
大小:188.50 KB
页数:12页
时间:2018-07-11
《spring思想注入依赖学习笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本人总结了一些ssh常见的面试题例举如下强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西spring的优点?1.降低了组件之间的耦合性,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能5.容器提供了众多的辅助类,能加快应用的开发6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spring属于低侵入式设计,代码的污染极低8.独立于各种应用服务器9.spring的DI机制降低了业务对象替换的复杂性10.
2、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部什么是DI机制?依赖注入(DependecyInjection)和控制反转(InversionofControl)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入。spring以动态灵活的方式来管理对象,注入的两种方式,设置注入和构造注入。设置注入的优点:直观,自然
3、构造注入的优点:可以在构造器中决定依赖关系的顺序。什么是AOP?面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面1.面向切面编程提供声明式事务管理2.spring支持用户自定义的切面面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。aop框架具有的两个特征:1.各个步骤之间的良好
4、隔离性2.源代码无关性依赖注入(DI)依赖注入(DI),是spring容器实现的基础,在spring-core模块中实现的。所谓DI,就是指对象是被动接受依赖类而不是自己主动去找,换句话说就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它。下面举一个形象的例子:1.class B{ 2. private A a; 3. public void setA(A a){ 4. this.a=a; 5. } 6.} 7. 8.class A{ 9.} 显然,此时B是依赖与A。我们不妨将A比作牛,将B比作人,人吃牛是
5、显然的事实。当用户要利用B的时候,必须先要指定他所依赖的A的对象。这样代码模块之间就具有很强的耦合。通过依赖注入的方式,能够使B对A的依赖关系对代码人员变得松散。我们将A和B对象都交给容器来管理,通过配置文件告诉B该依赖的A,这样代码中的依赖关系被移到了配置文件中,通过对配置文件的管理,很容易编写低耦合的代码。对于依赖注入的几种实现参考DependencyInjection。但是,目前在学术界争论的焦点在于:DI究竟能不能给程序带来解耦。众所周知,封装和依赖是面向对象编程思想中两个很重要的概念。编写高内聚低耦合的代码是OOP编程的目标。但是,这其中本来就存在着互相矛盾。所谓高内聚,
6、就是通过封装之后,是被封装的各个模块(这里一般是一个类)内部的功能功能相关性、依赖性、协作性等高。此时,我们要做的就是对模块按照上述标准进行分解,直到满意为止。但是,什么时候才是一个尽头?当我们在不断的对模块进行分解时,被分解的模块之间的耦合就不断的增强。此时,我们就会反过来想,低耦合就是不断降低模块之间的关系,没有关系最好。于是我们要做的就是模块合组,将耦合关系强的模块组合在一起。那怎么样才能做到最好?那不就是用一个统一的模块来表示整个需要描述的系统,废话那不就等于什么都没有做。说了这么多,我要说的就是要在内聚和耦合之间进行权衡,找到一个恰当的平衡点。下面切入正题,所谓耦合,简单
7、的理解就是模块与模块之间的关系,最主要的就是依赖关系。从上面的讨论很容易的发现模块之间的耦合是无法消除的,除非他们之间没有任何关系。那么DI为什么声称能够给程序带来解耦呢?我觉耦合并没有消除,甚至没有减弱。DI只是将耦合进行了转移,通常是转移到配置文件中。B对A的依赖关系原来在
此文档下载收益归作者所有