`

spring面试题 对DI , AOP概念的理解

阅读更多
今天有一哥们去面试 ,哥们说自己会ssh
面试官就问了几个spring的概念性的问题 ,哥们平时只专注于写代码,回来后一脸的无奈

本人总结了一些ssh常见的面试题 例举如下
强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西

spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
分享到:
评论
52 楼 在世界的中心呼喚愛 2014-01-26  
Loudyn 写道
DI跟IOC不是同一个概念。
Object obj = new Object();

直接new一个你需要的对象,也是DI。
DI又分两种,一个叫拉,一个叫推。
Object obj = new Object();
Object obj = factory.make();

直接new跟工厂模式都是拉的DI,需要客户端自己去得到自身需要的东西。
而IOC是一种推的DI。
你可以把IOC想象成理想的社会主义社会,你需要什么,它就会给你什么。
当然,有个前提,你需要的东西这个社会里面要有而且你必需受这个社会管理。
在spring的表现形式就是:
社会主义社会==BeanFactory 而你跟你需要的东西都是受这个BeanFactory管理的Bean。
事实上,纯粹的IOC是没法做的。

学习。。一直以为DI就是IOC,原来DI只是IOC的一种方式
51 楼 qin_eye 2011-06-23  
只是用到spring 的一部分而已,没有太多的感想,来围观一下好了
50 楼 quanjj 2011-06-22  
笑我痴狂 写道
今天有一哥们去面试 ,哥们说自己会ssh
面试官就问了几个spring的概念性的问题 ,哥们平时只专注于写代码,回来后一脸的无奈

本人总结了一些ssh常见的面试题 例举如下
强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西

spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性

49 楼 wxno1 2011-06-22  
这是很明显的容易打架的贴子,spring固然有好处,不然为啥像火一样烧便了j2ee界?

不能否认还有更好的,但是每种东西都会有适用性,就像servlet+jdbc也会有合适的时候
48 楼 uucall0123 2011-06-22  
需要面试才回味的。。。平常想我只要 增删查改 加 if else
47 楼 zyh0532 2011-06-21  
感觉跟项目复杂程度有关,一个简单的数据记录查询(自学demo除外),能用JDBC就能完成,非要去用Spring+hibernate显然是不合理的,相反,大型项目却使用servlet+jdbc能让人疯掉,而使用Spring去管理事务,实体映射,参数封装,方法拦截会轻松很多。
46 楼 whao189 2011-06-16  
是不是除了spring J2EE就没有其他的东西了?同志们都在讨论这个,为什么不换个问题讨论一下呢?比如:谁能好好讲讲JVM虚拟机(不要说想了解 就自己去看深入虚拟机之类的话),论坛里貌似没有几个人讲 它的,或者说讲得很好的,希望对虚拟机理解很透彻的人给讲一下!我不想为了框架而框架,当对java了解到一定程度自己就可以跟着设计模式来设计自己的框架何必要对spring指手画脚呢?(当然  你可以说我在造轮子了,但至少让我们对这个软件工程有了一个全新的认识,什么叫解耦,什么叫可复用。。等等诸如此类的问题我想都迎刃而解了!)
45 楼 wangyu1221 2011-06-16  
我现在的项目里,就用了hibernate,手工控制事务。其实把事务抽象出来到service层,然后用一个基类控制事务提交,filter控制回滚,并没有增加多少的代码量,虽然说没有IoC,代码里有很多new之类的依赖,但是在一些比较特殊的地方这种方式还是很方便的,能灵活控制流程。连Struts也仅仅是用了标签库,Action都没有,就用的简单的Servlet。但是确实很灵活,基本上没有实现不了的功能。

spring的作用,对我来说,在项目里的发挥的作用远不如在求职时发挥的作用大……

我的观点就是,合理的使用才能发挥最大的作用,为了XXX而XXX有时候反而得不偿失。
44 楼 xiaoyuqi00 2011-06-14  
ssh忘得差不多了,

很久没用
43 楼 diaoweili 2011-06-14  
笑我痴狂 写道
今天有一哥们去面试 ,哥们说自己会ssh
面试官就问了几个spring的概念性的问题 ,哥们平时只专注于写代码,回来后一脸的无奈

本人总结了一些ssh常见的面试题 例举如下
强调在回答的时候不要光回答概念,要思维扩散性的讲些相关的东西

spring 的优点?
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

什么是DI机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色
需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中
创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者
因此也称为依赖注入。
spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。

什么是AOP?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性

42 楼 dir_murong 2011-02-18  
Loudyn 写道
DI跟IOC不是同一个概念。
Object obj = new Object();

直接new一个你需要的对象,也是DI。
DI又分两种,一个叫拉,一个叫推。
Object obj = new Object();
Object obj = factory.make();

直接new跟工厂模式都是拉的DI,需要客户端自己去得到自身需要的东西。
而IOC是一种推的DI。
你可以把IOC想象成理想的社会主义社会,你需要什么,它就会给你什么。
当然,有个前提,你需要的东西这个社会里面要有而且你必需受这个社会管理。
在spring的表现形式就是:
社会主义社会==BeanFactory 而你跟你需要的东西都是受这个BeanFactory管理的Bean。
事实上,纯粹的IOC是没法做的。



正解  
41 楼 Loudyn 2011-02-16  
DI跟IOC不是同一个概念。
Object obj = new Object();

直接new一个你需要的对象,也是DI。
DI又分两种,一个叫拉,一个叫推。
Object obj = new Object();
Object obj = factory.make();

直接new跟工厂模式都是拉的DI,需要客户端自己去得到自身需要的东西。
而IOC是一种推的DI。
你可以把IOC想象成理想的社会主义社会,你需要什么,它就会给你什么。
当然,有个前提,你需要的东西这个社会里面要有而且你必需受这个社会管理。
在spring的表现形式就是:
社会主义社会==BeanFactory 而你跟你需要的东西都是受这个BeanFactory管理的Bean。
事实上,纯粹的IOC是没法做的。
40 楼 85977328 2011-02-16  
我对spring的了解是没这么深入
用到哪弄到哪。。。。
这个真是为了面试而学习吧
39 楼 wxno1 2011-02-16  
据我所知,现在面试都是一个德性,问的好像非常高深,进去一看大家一样写的很烂,这样面试有意义吗?除了那几个公认代码水平很高的公司,有几个公司在做软件时写的非常好的?
38 楼 hyhai7 2011-01-27  
flyfan 写道
引用
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念

应该说不是同一概念,依赖注入(DI)应该是实现控制反转(IOC)的一种方式而已,相应的还有依赖查找(Dependency Lookup)


不错,很精辟。赞一个
37 楼 cntaizi 2011-01-27  
peterwei 写道
上来就给他扯几个设计模式,然后说你自已怎么实现spring的aop和ioc,这样估计他就不会再问你什么了。


这个才是正解·
36 楼 tianhandigeng 2011-01-27  
flyfan 写道
引用
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念

应该说不是同一概念,依赖注入(DI)应该是实现控制反转(IOC)的一种方式而已,相应的还有依赖查找(Dependency Lookup)

对 ,依赖注入和控制反转不是同一个概念
35 楼 akunamotata 2011-01-27  
253405050 写道
javajdbc 写道
我想这些东东 也只有在面试的时候 提到。。。。

都快忘干净了



同感啊,前几天面试几家公司,问到SSH的一些概念问题,都答的不是很好。




我也是,以为自己已经很了解了,过去被问的详细些,就答不出来了
34 楼 抛出异常的爱 2011-01-10  
wangdgsc 写道
Log也可以使用aop的方式,不过你不能详细的记录到操作的是哪一条记录,操作前记录是什么样的,操作后记录是什么样的,你能记录的只是用户的这个操作是成功 或者失败

看你设计的好不好......
足够精巧的设计可以完成业务日志
另一种精巧可以完成指定表的日志(insert update)
33 楼 dingherry 2011-01-10  
mercyblitz 写道
finallygo 写道
说到spring,我有点小小的疑问,
我先说下我对spring的认识啊,spring中最主要的两个思想是ioc,aop
ioc就体现在工厂模式的应用,也就是说我们采用的都是面向接口的方式的编程,以后如果实现类发生变化了,可以通过修改配置文件而不用修改代码来实现系统的灵活性,但是实际上好像这种需求并不多啊,我们项目中都是一个接口,一个实现类,也就是说配置文件我们添加一个Dao的时候才去改配置文件,之后就再也不去动了,反而接口是经常变动的,因为需求是一直在增加的,所以给我的感觉就是接口成为了一个累赘,我改一个接口就要改一堆的东西(因为我们分了好几层,而一个方法的添加就从dao一直污染到顶层了),我觉得还不如直接创建一个实现类来的方便.
还有一个就是aop,我觉得主要就是用来做事务和日志的,但是这些用动态代理就可以实现了,我觉得spring太复杂了,没有必要用的
不知道我这两个思想有什么问题,麻烦你讲解一下.



最好不要修改接口,可以添加新的方法,淘汰前面的方法。类似于你这样的需求,过多的接口是没有必要的。可以设计动态参数,不过设计抽象不容易。

至于AOP,Spring AOP也是建立在他人的技术上的。利用动态代理是实现的,不过HardCode比较多。

添加新的方法,还是要涉及到DAO\SERVICE\IMPL等的改动,Spring这一点好麻烦啊

相关推荐

    Spring面试题总结.pdf

    在描述中提到,文档是“Spring面试题和答案”,这暗示文档会按照面试题的格式,提供问题以及对应的答案或解释,帮助读者更好地准备面试,对知识点有更深入的理解。 文档中提到的Spring概述包含了以下几个核心知识点...

    spring面试题.doc

    Spring 框架是Java开发中的一...以上内容涵盖了Spring的核心概念、AOP、DI、集成其他框架以及事务管理等方面,这些都是Spring面试中常见的知识点。理解和熟练运用这些内容,将有助于提升在Spring开发和面试中的竞争力。

    【BAT必备】spring面试题,spring MVC面试题,spring boot面试题,spring cloud面试题

    Spring的核心功能包括依赖注入(DI)、面向切面编程(AOP)和容器管理等。 #### 2. 依赖注入(DI) 依赖注入是Spring框架的一个核心特性,它通过将对象的依赖关系由外部注入而非内部创建的方式,实现了对象之间的...

    spring面试题宝典

    《Spring面试题宝典》是针对Java开发者,尤其是对Spring框架有一定掌握的程序员们准备的一份面试指南。Spring作为企业级应用开发中的重要组件,其深入理解和熟练运用是面试过程中的常见考察点。本宝典将围绕Spring的...

    Spring经典面试题

    ### Spring经典面试题详解 #### 一、Spring的工作原理 Spring 框架的核心功能之一是作为MVC架构的一部分提供支持。在这个过程中,Spring MVC 的请求处理机制是至关重要的。 1. **请求接收**:所有的HTTP请求首先...

    Spring面试题(含答案).pdf

    Spring面试题(含答案) Spring 是一个 Java 企业级应用的开源开发框架,主要用来开发 Java 应用,但是有些扩展是针对构建 J2EE 平台的 web 应用。Spring 框架目标是简化 Java 企业级应用开发,并通过 POJO 为基础...

    高级开发spring面试题和答案.pdf

    在Spring框架中,面试常涉及的关键知识点包括Spring的IoC(控制反转)、依赖注入、Bean的生命周期、AOP(面向切面...以上知识点都是Spring面试中可能涉及的核心内容,理解和掌握这些将有助于应对高级开发岗位的面试。

    Java Spring面试题.zip

    本资料“Java Spring面试题.zip”包含了针对Spring框架的面试题,旨在帮助求职者评估自己对Spring的理解程度和实战能力。下面我们将深入探讨Spring框架的核心概念、关键特性以及常见面试题的相关知识点。 1. **...

    Spring 面试题和答案.doc

    Spring的核心思想是控制反转(IoC)和面向切面编程(AOP),这两个概念极大地简化了Java应用程序的设计和维护。 1. **Spring 概述** - Spring是一个开源的Java企业级应用开发框架,主要目标是简化Java应用的开发,...

    Spring面试题和答案(70道,史上最全).pdf

    标题中提到的“Spring面试题和答案(70道,史上最全).pdf”暗示了文档包含了大量与Spring框架相关的面试问题及其答案。Spring是一个非常流行的Java企业级应用开发框架,它提供了全面的编程和配置模型,使得开发者...

    Spring面试题详细讲解

    Spring面试题详细讲解 Spring 是什么? Spring 是一个轻量级的 IoC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的框架,目的是简化应用程序的开发主要由以下几个模块组成:Spring Core:核心类库,提供 ...

    Spring+Mybatis+Springboot面试试题及答案.zip

    本压缩包文件提供了这三个技术的面试试题及答案,帮助求职者或开发者更好地理解和掌握这些技术的核心概念。 **Spring框架** Spring是一个开源的Java平台,它为构建企业级应用程序提供了全面的框架支持。主要特点...

    Spring AOP IOC源码笔记.pdf

    Spring AOP提供了Pointcut、Advisor、Aspect等概念,用于定义切入点、通知和切面。开发者可以通过自定义Aspect来实现特定的功能增强。 11. AOP的实现方式: Spring AOP支持基于代理和基于注解的两种方式。基于代理...

    Spring面试题合集

    Spring面试题合集涵盖了Spring框架的核心概念、重要特性以及常见的面试问题。以下是对这些知识点的详细阐述: 1. **IoC(控制反转)与DI(依赖注入)**: - IoC是指应用程序的控制权由传统模式中的对象自己控制...

    spring相关面试题.docx

    以下是对Spring面试题中涉及知识点的详细解释: 1. **Spring IOC的理解**: Inverse of Control(IOC)即反转控制,主要体现在Spring框架对对象创建和管理的控制权转移。传统的Java程序中,开发者通常需要手动创建...

    JAVA相关面试题,Spring面试题

    ### JAVA相关面试题与Spring面试题详解 #### 一、String、StringBuffer、StringBuilder的区别以及String为什么不可变? - **String**: Java中的`String`类是不可变的对象,即一旦创建了一个`String`对象,其内容不...

    spring面试题

    本文将根据"spring面试题"这一主题,结合提供的压缩包文件内容,深入探讨Spring框架的核心概念、重要特性以及与Hibernate集成的相关知识。 一、Spring框架基础 1. Spring是什么? Spring是一个开源的Java平台,它...

    77道Spring面试题以及参考答案(2024年最新版)

    通过依赖注入 (DI) 和面向切面编程 (AOP),Spring 为开发者提供了更高效的开发方式。 - **设计理念**: 支持 POJO 和 JavaBean 的开发方式,鼓励面向接口编程,实现松耦合。通过 IoC 容器管理对象间的依赖关系。 - **...

    Spring 面试题和答案.zip

    面试中,Spring相关的知识点通常包括其核心概念、配置方式、AOP原理、事务管理、MVC模块、Spring Boot以及Spring Cloud等方面。下面,我们将深入探讨这些关键知识点。 一、Spring框架核心概念 1. 依赖注入...

Global site tag (gtag.js) - Google Analytics