Spring工作原理 (IOC与AOP)
Spring的内部核心就是:动态注入(IOC),让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 。反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是:面向切面编程(AOP),可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 Spring里用的最经典的一个设计模式就是:模板方法模式
spring是一个非常优秀的框架,他的官方强烈推荐使用面向接口编程,非常好的思想!方便以后程序的扩展!和降低耦合度是根本目的。
Spring的三种注入方式.
1.设值方法注入(Setter Injection):通过JavaBean属性注射依赖关系 (比较常用)
2.构造子注入(Constructor Injection):将依赖关系作为构造子参数传入 (死的应用)
3.接口注入 (不推荐)
了解为什么要使用aop?使用aop有什么好处?
采用springAop技术就可以达到代码复用的效果。对于SpringAop技术应用很广泛。可以说是ooP的一个补充。
掌握springAop的原理。
springAop他其实就是一个横切面,他主要解决核心业务与非核心业务相分离。比如在我们程序当中要记录日志。日志模块他应该属于辅助业务。所以我们要将他们分离开来。这样有利于代码好维护。减少重复的代码。提高代码的可读性。
springAop的原理说白了,就是一个动态代理。
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足
OOP:将真实世界领域中的实体及各自的行为建模为抽象的对象。缺点:因为混合的属性与对象最初意图不一致
AOP:将OO不需要的属性改为切面来实现
springAop的术语?
Aop的核心概念:(专业的讲)
1:切面(Aspect):切面要要实现的交叉功能。
2:连接点(Joinpoint):连接点是应用程序执行过程中插入切面的地点。
在进一步讲就是在切面模块定义的方法(比如:增删改查)
3:通知(Advice):通知是某个切入点执行的代码。(通知其实就是切面的具体实现,也就是附加的新的行为)
4:切入点(Point cut):就是一组连接点的集合。(比如说:在我对学生进行增删查改的时候,我在具体那个方法中记录日志)
5:引入(Instroduction):引入允许你为己存在的类添加新的方法和属性。
6:目标对象(Target):目标对象就是被通知的对象。(比如:增删改查)
7:代理(proxy):Aop框架创建的对象,用来实现切面默约,包括通知方法执行等功能。
8:织入(weaving):织入是将切面应用到目标对象而创建一个新的代理对象的过程。
springAop切入点与连接点的理解?
所谓切入点:就是我们需要在哪些业务类中的某一些方法中需要调用通知的这样一段代码。
连接点:就是我们在调用该方法。
spring通知对象有几种方式?解决了什么样的问题?
spring有四种通知(advice)。
Around:拦截对目标对象方法的调用(环绕通知)
Before:在目标方法被调用之前调用(前置通知)
After:在目标方法被调用之后调用(后置通知)
Throws:当目标方法抛出异常时调用(异常通知)
他们主要解决了核心业务与非核心业务的分离。让我们的精力关注核心业务,而将非核心的代码分离开来。
比如:我要写日志或处理事务。
使用接口形式实现静态切入点!
我们只需要继承StaticMethodMatcherPointcutAdvisor.
介绍一下Spring的事务管理:
事务:就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
spring提供的事务管理可以分为两类:编程式的和声明式的。
编程式的,比较灵活,但是代码量大,存在重复的代码比较多;
声明式的比编程式的更灵活。编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
spring中的BeanFactory与ApplicationContext的作用有哪些?
1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。
2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:
a. 国际化支持
b. 资源访问:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”
c. 事件传递:通过实现ApplicationContextAware接口
3. 常用的获取ApplicationContext的方法:
FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
spring中的核心类有那些,各有什么作用?
BeanFactory:产生一个新的实例,可以实现单例模式
BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
什么是aop,aop的作用是什么?
面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足除了类(classes)以外,AOP提供了切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理.
Spring的一个关键的组件就是AOP框架,可以自由选择是否使用AOP
提供声明式企业服务,特别是为了替代EJB声明式服务。最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事物管理之上
允许用户实现自定义切面,用AOP来完善OOP的使用
可以把Spring AOP看作是对Spring的一种增强
总结起来,Spring有如下优点:
◆低侵入式设计,代码污染极低
◆ 独立于各种应用服务器,可以真正实现Write Once,Run Anywhere的承诺
◆Spring的DI机制降低了业务对象替换的复杂性
◆Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
什么是Spring, 它有什么特点?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量。
◆控制反转。
◆面向切面
◆容器
◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
请介绍一下Spring框架中Bean的生命周期
一、Bean的定义
二、Bean的初始化
三、Bean的调用
四、Bean的销毁
Spring中ApplicationContext的作用是什么?
beanFactory
国际化(getMesage)
资源管理:可以直接读取一个文件的内容(getResource)
加入web框架中(加入一个servlet或监听器)
事件处理
aop中的关键名词有些那些,相互关系是什么?
拦截器: 代理
装备(advice)
目标对象
关切点:条件
连接点:方法、属性