Spring核心思想
Spring的优点
- 低侵入式设计
- 独立于各种应用服务器
- 依赖注入特性将组件关系透明化,降低了耦合度
- 面向切面编程特性允许将通用任务进行集中式处理
- 与第三方框架的良好整合
控制反转为程序开发带来的好处/缺点是什么?
在最开始写程序,DAO是我们自己new出来的,这时候的编程完全控制在自己手里,用了spring之后,初始化过程控制在容器手里了,我们自己不再去new它了,反转到容器那里去了。
IoC最大的好处是什么?
因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCSI硬盘了)。
IoC最大的缺点是什么?
(1)生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。
(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。
(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。
Spring AOP的增强处理类型有哪些?
前置增强:org.springframework.aop.BeforeAdvice是前置增强顶层接口,因为Spring只支持方法的增强,其子接口MethodBeforeAdvice是目前可用的前置增强。表示在目标方法执行前实施增强。
后置增强:org.springframework.aop.AfterReturningAdvice是目前可用的后置增强,表示在目标方法执行后实施增强。
环绕增强:org.aopalliance.intercept.MethodInterceptor代表了环绕增强,表示在目标方法执行前后实施增强。直接使用了AOP联盟定义的接口。
异常抛出增强:org.springframework.aop.ThrowsAdvice代表了异常抛出增强,表示在目标方法抛出异常后实施增强。
引介增强:org.springframework.aop.IntroductionInterceptor代表引介增强,表示在目标类中添加一些新的方法和属性。
根据你的理解,什么是控制反转/依赖注入?
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。
所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。
这是我对Spring的IoC(控制反转)的理解。DI(依赖注入)其实就是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了。
使用Spring IoC的步骤是什么?
以beans为列
1、 spring容器启动时做了什么? (ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”))
2、getBean(“someBean”)时做了什么?
列举Spring实现依赖注入的几种方式?
- set方法
- 构造方法
- 静态工厂
- 实例工厂
列举Spring实现AOP的几种方式
-
增强处理(Advice)
前置增强
后置增强
环绕增强、异常抛出增强、最终增强等类型 -
切入点(Pointcut)
-
连接点(Join Point)
-
切面(Aspect)
-
目标对象(Target object)
-
AOP代理(AOP proxy)
-
织入(Weaving)
什么是IoC?为何要在程序开发中使用控制反转?
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。
表达式匹配规则public * addNewUser(entity.User): “”表示匹配所有类型的返回值。
public void (entity.User): “”表示匹配所有方法名。
public void addNewUser(…): “…”表示匹配所有参数个数和类型。
com.service..(…):匹配com.service包下所有类的所有方法。
com.service….*(…):匹配com.service包及其子包下所有类的所有方法
什么是“简单工厂模式”?有什么优点?
工厂模式,顾名思义,最少有一个生产产品的机器存在的工厂Factory,与此同时,也要有一个构建好的产品模块Product。所以,我们要用到Factory来创造Product。在简单工厂模式中,有几种角色存在。一个是所有产品的父类P,即所有产品的模板;另外一个是继承了父类P的产品子类p1,p2…;当然,最重要的是Factory,在Factory中可以将这些的产品实例化,根据需求来将Factory和Product产生联系。
优点:克服了简单工厂违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性,所以说“工厂模式”是“简单工厂模式”的进一步抽象和推广。
缺点:每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量。