面向切面编程

面向切面编程
面向切面编程

AOP

问题:面向对象技术很好地解决了软件系统中角色划分的问题。借助于面向对象的分析、设计和实现技术,开发者可以将问题领域的“名词”转换成软件系统中的对象,从而很自然地完成从问题到软件的转换.但是,问题领域的某些需求却偏偏不是用这样的“名词”来描述的.我的一个朋友就曾经遇到这样的问题:需要对系统中的某些方法进行日志记录,这种需要记录方法散布在40多个类中。面对这种需求,应该怎么办呢?最直接的办法就是:创建一个起类(或接口),将日志的功能放在其中,并让所有需要日志功能的类继承这个起类(或接口).如果这个需求是后期提出的.需要修改的地方就会分散在40多个文件(如果是C+十,这个数量还可能加倍)中。这样大的修改量,无疑会增加出错的几率,并且加大系统维护的难度。

面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

是目前软件开发中的一个热点,也是Spring框架中的一个重要内容,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP是OOP的延续。

设计模式孜孜不倦追求的是调用者和被调用者之间的解耦。

在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。

而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。

上面的陈述可能过于理论化,举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。

同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP 对一个动作进行封装,则有点不伦不类。

换而言之,OOD/OOP面向名词领域,AOP面向动词领域。

应用举例:

假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。

为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。

使用传统的编程习惯,我们会创建一个抽象类,所有的访问类继承这个抽象父类,如下:abstract class Worker{

abstract void locked();

abstract void accessDataObject();

abstract void unlocked();

}

缺点:

accessDataObject()方法需要有“锁”状态之类的相关代码。

变这些行为的时候不影响业务逻辑的代码。

那么面向方面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可面向方面编程和面向对象编程不但不是互相竞争的技术而且彼此还是很好的互补。面向对象编程主要用于为同一对象层次的公用行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这恰恰是面向方面编程适合的地方。有了AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合作得很好。

传统的程序通常表现出一些不能自然地适合单一的程序模块或者是几个紧密相关的程序模块的行为,AOP 将这种行为称为横切,它们跨越了给定编程模型中的典型职责界限。横切行为的实现都是分散的,软件设计师会发现这种行为难以用正常的逻辑来思考、实现和更改。最常见的一些横切行为如下面这些:

日志记录,跟踪,优化和监控

侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)

?关注点(concern):对软件工程有意义的小的、可管理的、可描述的软件组成部分,一个关注点通常只同一个特定概念或目标相关联。

?主关注点(core concern):一个软件最主要的关注点。

?关注点分离(separation of concerns,SOC):标识、封装和操纵只与特定概念、目标相关联的软件组成部分的能力,即标识、封装和操纵关注点的能力。

?方法(method):用来描述、设计、实现一个给定关注点的软件构造单位。

?横切(crosscut):两个关注点相互横切,如果实现它们的方法存在交集。

?支配性分解(dominant decomposition):将软件分解成模块的主要方式。传统的程序设计语言是以一种线性的文本来描述软件的,只采用一种方式(比如:

类)将软件分解成模块;这导致某些关注点比较好的被捕捉,容易进一步组合、扩展;但还有一些关注点没有被捕捉,弥散在整个软件内部。支配性分解一般是按主关注点进行模块分解的。

?横切关注点(crosscutting concerns):在传统的程序设计语言中,除了主关注点可以被支配性分解方式捕捉以外,还有许多没有被支配性分解方式捕捉到的关注点,这些关注点的实现会弥散在整个软件内部,这时这些关注点同主关注点是横切的。

?侧面(aspect):在支配性分解的基础上,提供的一种辅助的模块化机制,这种新的模块化机制可以捕捉横切关注点。

从主关注点中分离出横切关注点是面向侧面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。

“面向侧面的程序设计”(aspect-oriented programming)这一术语出现的具体时间已经不可考证了,但该词是由施乐帕洛阿尔托研究中心的Chris Maeda首先提出的。术语“横切”(crosscutting)是由GregorKiczales提出的。

对于一个信用卡应用程序来说,存款、取款、帐单管理是它的主关注点,日志和持久化将成为横切整个对象结构的横切关注点。

连接点(Joinpoint):程序执行过程中的一个点,例如对某个方法的调用或者某个特定异常的抛出都可以称为连接点。

通知(Advice):AOP框架在某个连接点所采取的行为。通知有多种类型,包括“环绕”通知,“前置”通知和“异常”通知等,后文将对通知类型进行讨论。包括https://www.360docs.net/doc/5015763729.html,在内的很多AOP框架都把通知建模为拦截器(interceptor),并且会维护一个"包围"在连接点周围的拦截器链。

切入点(Pointcut):指通知的应用条件,用于确定某个通知要被应用到哪些连接点上。AOP框架应允许让开发人员指定切入点,例如,可以使用正则表达式来指定一个切入点。

引入(Introduction):向目标对象添加方法或字段的行为。https://www.360docs.net/doc/5015763729.html,允许为任何目标对象引入新的接口。例如,可以利用引入让任何对象在运行期实现IAuditable接口,以简化对象状态变化的跟踪过程。(按:也称为mixin,混入)

目标对象(Target object):指包含连接点的对象。也称为被通知或被代理对象。(按:“被通知对象”实际是“被应用了通知的对象”,在译文中,将advised object或proxied object统称为目标对象,这样更为统一)

AOP代理(AOP proxy):由AOP框架在将通知应用于目标对象后创建的对象。在https://www.360docs.net/doc/5015763729.html, 中,AOP代理是使用IL代码在运行时创建的动态代理。

织入(Weaving):将方面进行组装,以创建一个目标对象。织入可以在编译期完成(例如使用Gripper_https://www.360docs.net/doc/5015763729.html,编译器),也可以在运行时完成。https://www.360docs.net/doc/5015763729.html,在运行时执行织入。

各种通知类型包括:

环绕通知(Around Advise):包围(按:即在连接点执行的前、后执行)某个连接点(如方法调用)的通知。这是功能最强大的一种通知。环绕通知允许在方法调用的前后执行自定义行为。它可以决定是让连接点继续执行,还是用自己的返回值或异常来将连接点“短路”。

前置通知(Before Advise):在某个连接点执行之前执行,但是不具备阻止连接点继续执行的能力(除非它抛出异常)。

异常通知(Throws Advise):当方法(连接点)抛出异常时执行。https://www.360docs.net/doc/5015763729.html,的异常通知是强类型的(按:https://www.360docs.net/doc/5015763729.html,用标识接口来定义异常通知,异常通知的处理方法仅需遵循一定的命名规则,可以用具体的异常类型声明其参数,参见12.3.2.3节),所以,可以在代码中直接捕捉某个类型的异常(及其子类异常),不必从Exception转型。

后置通知(After returning Advise):在连接点正常执行完成后执行,例如,如果方法正常返回,没有抛出异常时,后置通知就会被执行。

财务系统论文:财务系统https://www.360docs.net/doc/5015763729.html,

【关键词】财务系统 AOP https://www.360docs.net/doc/5015763729.html, 【英文关键词】Financial System AOP https://www.360docs.net/doc/5015763729.html, 财务系统论文:基于AOP设计模式的财务系统的设计和实现 【中文摘要】近些年来,随着企业的发展速度的不断加快,计算机和网络在企业中的应用越来越广泛,企业中各种业务活动也越来越离不开计算机的支持和协助。其中,企业中财政业务处理更是显著的说明了这一点,由于传统的财务管理在存储和查询等方面存在的诸多弊端,现代企业在传统的财务管理基础上,越来越倾向于使用基于计算机和网络系统的财务管理。随着软件设计模式的不断更新和完善,一种新的设计模式越来越受到软件设计人员的重视和使用:Aspect Oriented Programming,即面向切面方向编程的设计模式,简称AOP 设计模式。这种设计模式可以将传统设计模式的各个模块中的重复的逻辑业务代码块抽离出来,放在单独的切面模块中进行处理,降低了程序编码的耦合性,方便动态的添加功能,增加了程序代码的可重用性。面向切面方向编程是对面向对象编程的一种很好的补充和完善,两者不是对立的,而是相互补充,共同使用的,面向对象编程适用于实体类的编程,而面向切面方向的编程适合于对公共的业务操作类进行封装,两者相辅相成,共同作用。目前面向切面方向编程的模式在.NET平台下的发展还不够完善,但是从.NET和JAVA在语言实现上

的某些相似性上来看,我们可以参照JAVA平台中AOP的实现机制和方法,结合.NET语言的特点,进行相关的实现。JAVA平台中对AOP 进行了较好实现的是著名的Spring框架。.NET平台下的AOP框架目前有Aspect C#,Eos等等,https://www.360docs.net/doc/5015763729.html,是Spring框架的.NET移植版,是目前对AOP封装较为完善的框架。本文采用传统软件开发流程和方法,对财务系统进行了详细的分析和架构设计,并对模块设计和实现阶段进行了详细的描述,本文完成和描述的具体的内容如下:一、对财务系统进行详细的需求分析需求分析是软件工程中非常重要的 一个阶段,决定着软件系统是否能够正确的完成并符合用户的要求,本文针对财务系统业务流程中涉及的各种问题进行了详细分析并且 将业务领域与计算机领域联系起来,并对各个业务模块设计相应的软件功能模块。二、对财务系统进行架构设计结合传统的软件开发模式,将面向对象设计模式和面向切面设计模式相结合,将系统的界面层,业务层和数据层分别实现,并在业务层中添加面向切面设计模式中的消息拦截和功能添加处理,针对财务系统中涉及的特殊功能需要进行相应的设计。三、对系统进行编码实现系统的实现使用了C#开发语言和.NET平台,结合SQLSERVER数据库完成数据的存储和管理。针对财务业务中遇到的数据精度,权限检查,日志管理等等分别进行了实现,并设计和实现了良好的用户界面。是操作界面更加友善化,对系统管理员提供了更加直观的管理和分析功能,使管理者能够在企业中做出更加正确的决策。四、总结和展望完成上述工作后,对整个开

学习面向切面编程的总结

AOP(面向切面编程) 可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于 各个模块的重用。 而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。 使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。

软件开发应知应会-84分

研究数据结构就是研究() A.数据的逻辑结构 B.数据的存储结构 C.数据的逻辑结构和存储结构 D.数据的逻辑结构、存储结构及其运算结构栈和队列的共同特点是()。 A.都是先进先出 B.都是先进后出 C.只允许在端点处插入和删除 D.没有共同点 关键路径是事件结点网络中()。 A.从源点到汇点的最长路径 B.从源点到汇点的最短路径 C.最长的回路 D.最短的回路 以下是线性表的数据结构是()。 A.数组 B.单链表 C.双链表 D.循环链表 以下()是常用的哈希函数构造方法。 A.直接寻址法 B.除留余数法 C.随机数法 D.平方取中法 不属于Swift属性的是() A.存储属性 B.计算属性 C.类型属性 D.以上都不是 CSS3的优点是() A.减少开发成本

B.减少维护成本 C.提高页面性能 D.以上都是 Objective-C最大的特色是承自Smalltalk的(),此机制与今日C++式之主流风格差异甚大。 A.消息传递模型(message passing) B.阅读者模式模型 C.单例模式模型 D.广播模型 CSS的定位常用属性有以下几个值() A.static B.relative C.fixed D.absolute 以下哪些是语义化标签? A.div B.span C.article D.header 在shell中,使用一个定义过的变量,引用时在变量名前加()。 A.$ B.& C.* D.@ SQL中删除数据库的关键字是()。 A.select B.insert C.delete D.drop SQL语句中删除一个表中记录,使用的关键字是()。 A.select B.insert C.delete

(完整)中南大学软件学院架构复习大全,推荐文档

●使用Hibernate框架进行ORM,可大幅度减少开发时手工使用SQL和JDBC的出错。优点:简单。缺 点:多了查询,慢(但实际对于一个JAVA EE应用而言,hibernate通常的处理流程是:从数据看里加载记录->将信息发送到表现层供用户修改或删除->将所做修改重新保存到数据库。在这种处理流程下,应用本身就需要两条SQL语句)。 ●iBats---半自动化ORM框架提供了基于JDBC之上的一层简单抽象,是一种基于SQL语句映射的 低级别ORM方案,使用原生态SQL作为查询语言。 ●OGNL是Object Graph Navigation Language,对象图导航语言。ONGL是一种强大的表达式语言,它通 过简单一致的表达式语法来读取和设置Java对象的属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。WEB容器是指一种安装在服务端计算机中的特定软件。此类软件遵循HTTP 协议,主要功能是负责侦听指定端口,接收客户端的请求并解析,然后将指定的响应页面发送到客户端。EL表达式EL是一种简单而强大的语言,提供了在JSP脚本元素范围外使用运行时表达式的功能。 Web Services应用程序组件,使用开放协议进行通信,独立的并可自我描述,可通过使用UDDI来发现,可以被其他应用程序使用,XML是其基础。 ●Mybatis一个持久数据映射框架,提供了基于JDBC之上的一层简单抽象,是一种基于SQL语句映射 的低级别ORM方案,使用原生态SQL作为查询语言,用来完成数据持久化MyBaits基本原理:在XML 文件中定义SQL语句,预留参数占位符;在运行时,占位符被指定的参数值取代,参数可能来自参数映射表、JavaBean属性、或者简单的参数对象。在执行SQL查询时,结果字段被映射到对象,映射的方式与参数映射一样。 ●ORM框架ORM, Object-Relational Mapping, 对象-关系数据库映射框架。在关系型数据库和业务实体对 象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。 ●拦截器(Interceptor)是Struts2的一个重要特性。Struts2的大多数核心功能都是通过拦截器来实现的, 如类型转换、对象组装、输入校验、文件上传等。Struts2将其大多数核心功能通过拦截器来实现,而不是分散在Action中实现,有利于系统的解耦,实现“hot-plug”。需要某个功能就“plug-in”一个拦截器,而不需要修改和业务相关的Action代码。编写一个用于安全验证的拦截器第一步:修改UserAction第二步:编写拦截器类AuthenticationInterceptor extends AbstractInterceptor第三步:配置拦截。 ●DI强制将组件的构建和使用分开。(组件的生产、组件的使用、接口的定义、运行时注入)。借 助spring框架,实现工厂的效果。如果类与类之间没有依赖(不能提取接口),则不用IOC(如果横向有依赖,即action与action之间有关系,说明没有设计好)功能太小,也不用IOC,spring是做大系统的。DI有两种最常用的方式:构造注入——保留依赖的先后顺序。Set注入——更多使用步骤:定义组件接口:墨盒接口ink;纸张接口paper;使用接口开发打印机:printer(使用ink和paper接口)组装打印机:在printer里。给ink和paper创建set方法创建或得到ink和paper的实现类。组装——在src下创建applicationContext.xml(依赖注入)。运行打印机 ●Spring框架的一项最基本的功能就是充当创建对象的工厂,具体步骤为:第一步:读取并 分析spring配置文件(如XML配置文件);第二步:通过反射机制,创建并集成上述配置文件中的对象;第三步:将创建的对象传回给应用代码。

spring面试题 对di , aop概念的理解

spring面试题对di , aop概念的理解 什么是AOP 面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面 面向切面编程(aop)是对面向对象编程(oop)的补充, 面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。 aop框架具有的两个特征: 1.各个步骤之间的良好隔离性 2.源代码无关性 什么是DI机制 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 需要另外一个角色协助的时候,在传统的程序设计过程中,通常

由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入。 spring以动态灵活的方式来管理对象,注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 spring 的优点都有哪些 1.降低了组件之间的耦合性,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

详细设计

详细设计说明书 总体设计 一、引言 (一)编写目的 详细设计的目标是确定应该具体地实现所要求的系统,得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的任务是根据系统需求分析报告和系统概要设计报告中对业务功能的定义,以及系统框架的要求,进而实现更进一步的具体设计。详细设计报告中将从业务的具体实现功能方面入手,从用户界面的设计、类的详细定义、成员变量的使用,到过程调用的输入输出参数等多方面进行规范、定义、说明。 根据概要设计书,整个程序分为六大模块:用户信息管理,求租管理,员工信息,出租管理,系统管理和帮助模块,本文将对每个模块具体如何实现进行描述。(二)系统说明 项目的开发需求方是XX房屋中介公司,由XX软件公司与XX学校软件专业共同承接开发任务,预期用户是中介行业内部操作人员、库存管理人员,公司经理等。 (三)术语 表1.1 术语定义

(四)参考资料 表1.2 参考资料 二、软件结构 (一)软件功能结构图

图软件功能结构图

(二)模块清单 表2.1 模块清单 三、登录模块设计说明 从本章开始,逐个地给出各个层次中的每个程序的设计考虑。以下给出的提纲是针对一般情况的。对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。 3.1程序描述 (1)程序目的:登录和注册功能是论坛必须具备的功能之一,开放注册后,用户才可以在论坛上一登录者的身份发表帖子; (2)特点:该窗体在设计上尽量的符合人们的使用习惯,并且在出现用户名冲突的的情况

spring课程设计

Spring 课程设计 一、概述 Spring是轻量级的J2EE应用程序开源框架。它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。任何Java应用都可以从Spring中受益。Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架(即spring可以整合很多很多现在的框架结构,比如已学过的struts2、ibatis等) Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模块不应该依赖低层模块,而是模块都必须依赖于抽象」是IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不应依赖于容器,而是容器服务于应用程序」也是IoC的一种表现 总结:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 二、特征 轻量spring的jar包可以只有1MB里发布 控制反转Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里 下面列出spring中几大核心模块

1_Spring Aop 面向切面+路径问题

1, 知识点:项目中的路径问题 404-问题 1.1,跳转路径问题404- 当前JSP所在的目录为(WEB-INF/ccc)会调到当前页面所在的目录底下的 例如(WEB-INF(项目包)/ccc) 点击之后会跳到= ccc/console/register.jsp 1.2,遇到跳转错误的解决方式 首先区分两个路径的区别 1), 2), 斜线的意思是根目录 加了斜线之后,会直接从localhost:8080/之下开始 所以解决的方法是更改为 根路径设置 1.3 , 在JSP页面中使用EL表达式获取当前项目名字的方法 2, Spring Aop 面向切面 实现在不修改源代码的情况下给程序动态统一添加功能的一种技术 2.1 , 要插入的代码必须明确给出 编写Aop类

2.2 , 如何区分什么时间插入什么代码 被切面切入的方法 2.3 , 如何控制只在指定类的指定方法中插入 2.3.1("execution(* com..*.*(..))") execution[,eksi'kju:??n] (execute['eksikju:t] ) n.实行, 完成, 执行, 死刑[计]执行

2.3.2,第一个*为项目名 2.3.3,com为包名com..说明包含com包之下的所有子文件 2.3.4,第二个*类名 2.3.5,第三个*方法名 2.3.6, ()为参数列表 2.4 , 知识点 1,切面: 我们管切入到指定类指定方法的代码片段称为 2,切入点: 而切入到哪些类、哪些方法。 3,通知: 分为前置通知,后置通知,异常通知,最终通知,环绕通知:拦截到joinpoint之后所要做的事情就是通知. 4, Spring提供了两种切面声明方式 ,实际工作中我们可以选用其中一种: 基于XML配置方式声明切面。 基于注解方式声明切面。 @Aspect\@Pointcut("execution(* com..*.*(..))")\@Before("cutPoint()") \@After("cutPoint()")

面向侧面的程序设计

面向侧面的程序设计 Aspect Oriented Programming 什么是面向侧面程序设计 面向侧面的程序设计(aspect-oriented programming,AOP,又称作面向方面的程序设计、观点导向编程)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。 面向侧面程序设计起源 Xerox(施乐)公司PARC研究中心在1997年的欧洲面向对象编程大会(ECOOP97)上首次提出Aspect-oriented programming(AOP)。自2002年起,每年分别在欧洲和美国轮流召开专门的面向侧面软件开发(AOSD)国际会议。与会者包括美国、加拿大、荷兰、英国、法国、丹麦、日本、以色列等。我国一些学校也对AOP给以关注并开展了一些研究工作。从AOP概念提出经过了近十年的时间,这种技术现在已经开始被工业界采用。 AOP产生的背景 计算机软件设计的一个重要原则,就是要清晰分离各种关注点(separation of concerns),然后分而治之,各个击破,最后形成统一的解决方案 例如:信用卡处理系统核心关注点是处理付款;系统级关注点包括日志、事务、认证、安全和性能等等。 软件系统中,某个行为,例如操作日志的记录,存在于软件的各个部分中,这个行为可以看作是横向存在于软件之中,他所关注的是软件的各个部分的一些共有的行为。在很多情况下,这种行为不属于业务逻辑的一部分。这种操作并不是业务逻辑调用的必须部分,但是,我们却往往不得在代码中显式进行调用,并承担由此带来的后果。 在目前的技术框架下,通常系统级关注点在逻辑上相互之间彼此正交(相互独立),同时在实现上趋向于和若干核心模块交织。

面向切面编程

AOP 问题:面向对象技术很好地解决了软件系统中角色划分的问题。借助于面向对象的分析、设计和实现技术,开发者可以将问题领域的“名词”转换成软件系统中的对象,从而很自然地完成从问题到软件的转换.但是,问题领域的某些需求却偏偏不是用这样的“名词”来描述的.我的一个朋友就曾经遇到这样的问题:需要对系统中的某些方法进行日志记录,这种需要记录方法散布在40多个类中。面对这种需求,应该怎么办呢?最直接的办法就是:创建一个起类(或接口),将日志的功能放在其中,并让所有需要日志功能的类继承这个起类(或接口).如果这个需求是后期提出的.需要修改的地方就会分散在40多个文件(如果是C+十,这个数量还可能加倍)中。这样大的修改量,无疑会增加出错的几率,并且加大系统维护的难度。 面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 是目前软件开发中的一个热点,也是Spring框架中的一个重要内容,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP是OOP的延续。 设计模式孜孜不倦追求的是调用者和被调用者之间的解耦。 在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。 而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。 上面的陈述可能过于理论化,举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。 同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP 对一个动作进行封装,则有点不伦不类。 换而言之,OOD/OOP面向名词领域,AOP面向动词领域。 应用举例: 假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。 为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。 使用传统的编程习惯,我们会创建一个抽象类,所有的访问类继承这个抽象父类,如下:abstract class Worker{

Java实现AOP面向切面编程的实例教程

Java实现AOP面向切面编程的实例教程 这篇文章主要介绍了Java实现AOP面向切面编程的实例教程,通常Java中的AOP都是利用Spring框架中造好的轮子来开发,而本文则关注于Java本身AOP的设计模式实现,需要的朋友可以参考下 介绍 众所周知,AOP(面向切面编程)是Spring框架的特色功能之一。通过设置横切关注点(cross cutting concerns),AOP提供了极高的扩展性。那AOP在Spring中是怎样运作的呢?当你只能使用core java,却需要AOP技术时,这个问题的解答变得极为关键。不仅如此,在高级技术岗位的面试中,此类问题也常作为考题出现。这不,我的朋友最近参加了一个面试,就被问到了这样一个棘手的问题——如何在不使用Spring及相关库,只用core Java的条件下实现AOP。因此,我将在本文中提供一份大纲,帮助大家了解如何只用core Java实现一个AOP(当然啦,这种AOP在功能上有一定的局限性)。注意,本文不是一篇有关Spring AOP 与Java AOP的对比研究,而是有关在core Java中借助固有的设计模式实现AOP的教程。 想必读者已经知道AOP是什么,也知道在Spring框架中如何使用它,因此本文只着眼于如何在不用Spring的前提下实现AOP。首先,我们得知道,Spring是借助了JDK proxy和CGlib 两种技术实现AOP的。JDK dynamic proxy提供了一种灵活的方式来hook一个方法并执行指定的操作,但执行操作时得有一个限制条件:必须先提供一个相关的接口以及该接口的实现类。实践出真知,让我们透过一个案例来理解这句吧!现在有一个计算器程序,用于完成一些数学运算。让我们来考虑下除法功能,此时的问题是:如果core framework已经具备了一份实现除法的代码,我们能否在代码执行时劫持(highjack)它并执行额外的校验呢?答案是肯定的,我将用下面提供的代码片段来证明这点。首先来看基础接口的代码: public interface Calculator{public int calculate(int a,int b);} 该接口实现类的代码如下: public class CalculatorImpl implements Calculator{@Override public int calculate(int a,int b) {return a/b;}} 假设我们既不能修该上面的代码,也不能对核心库进行任何改动,怎样才能完美地实现校验功能呢?不如试下JDK dynamic proxy的功能吧。 public class SomeHandler implements InvocationHandler{//Code omitted for simplicity….. @Override public Object invoke(Object proxy,Method method,Object[]params)throws Throwable{//Your complex business validation and logic Object result= method.invoke(targetObject,params);return result;}} 让我们通过测试类来看看由JDK dynamic proxy实现的校验功能的效果如何。

Spring习题

1、阐述Spring工作原理。 1、spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2、DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller 3、DispatcherServlet请请求提交到目标Controller 4、Controller进行业务逻辑处理后,会返回一个ModelAndView 5、Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6、视图对象负责渲染返回给客户端。 2、在Spring IoC核心模式中,试比较Set依赖注入与构造函数依赖注入的异同点? 属性注入和构造注入都具有无侵入性的特点。 构造注入:构造注入可以一次性地为组件注入多个不同依赖的目标参数对象,避免为每个属性成员提供get/set方法,从而使得组件被创建后处于相对稳定状态;类之间的关联关系仅在构造函数中表达,使得系统层次清晰;通过构造注入,可以在构造函数中决定依赖关系得注入顺序,优先依赖的先注入; 属性注入:能够使得单元测试比较简单和分别实现;通过setter方法设定依赖关系显得更加直观,自然;如果依赖关系(或继承关系)较为复杂,设置注入则更为简洁;对于某些第三方类库,有求组件必须提供默认的构造函数,此时构造注入就有了局限性,采用设置注入为佳。 3、Struts中ActionForm有什么作用? 1、ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。 2、Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。 3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionForm Bean中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改,JSP 文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。 ActionForm是和页面的Form对应的,也就是接收页面输入的数据一开始保存在ActionForm中,然后再Action里面,调用逻辑层的代码来处理这些数据。 4、说说你理解的“框架”,举个现实生活中框架的例子。 5、阐述Spring框架和EJB各自的优缺点? EJB 是优良的业务对象分布式框架,EJB容器具有事务管理,安全机制功能; EJB是重量级的,部署麻烦;EJB 代码不能脱离EJB 容器;购买EJB 容器价钱昂贵,启动缓慢; Spring框架是轻量级的架构,支持EJB并对其实现更加简化,实现了解耦,并脱离了容器;中断了应用程序的逻辑,使代码变得不完整,不直观。将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担。失去了IDE的支持。调试阶段不直观,后期的bug 对应阶段,不容易判断问题所在。 6、模式和框架的区别。 框架和模式都是提高软复用的技术手段,他们之间互相联系但又有所侧重:1、设计模式比框架更抽象:应用框架能够用代码表示,而设计模式只有其实例才能表示为代码。框架能够使用程序设计语言写出来,不仅能被学习,也能被直接执行和复用。而设计模式的每一次复

程序设计的流程图.doc

程序设计的流程图 程序设计的流程图 程序设计的方法 面向过程 面向过程的结构化程序设计分三种基本结构:顺序结构、选择结构、循环结构 原则: 1,自顶向下:指从问题的全局下手,把一个复杂的任务分解成许多易于控制和处理的子任务,子任务还可能做进一步分解,如此重复,直到每个子任务都容易解决为止。 2,逐步求精 3,模块化:指解决一个复杂问题是自顶向下逐层把软件系统划分成一个个较小的、相对独立但又相互关联的模块的过程。 注意事项 1,使用顺序、选择、循环等有限的基本结构表示程序逻辑。 2,选用的控制结构只准许有一个入口和一个出口 3,程序语句组成容易识别的块,每块只有一个入口和一个出口。 4,复杂结构应该用基本控制结构进行组合或嵌套来实现。 5,程序设计语言中没有的控制结构,可用一段等价的程序段模拟,但要求改程序段在整个系统中应前后一致。 6,严格控制GOTO语句。 面向对象的程序设计

面向对象的基本概念 1,对象 2,类 3,封装 4,继承 5,消息 6,多态性 优点 1,符合人们认识事物的规律 2,改善了程序的可读性 3,使人机交互更加贴近自然语言 面向切面程序设计 Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个查询学生信息的服务,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服 务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务

面向切面编程

软件设计和开发的简史 软件开发方法的演化史绝对是一部寻找“银弹”的历史,即研究管理软件复杂度方法的历史。我个人的体会:开发复杂的软件系统的确,呃,复杂,由此带来不菲的时间和金钱的花费。下面我们看一下5种软件方法论的发展及应用。 4.1 结构化编程(Structured programming) 在结构化编程思想提出之前几年,我就已经开始了(始于1973)职业编程生涯。结构化编程涉及正确使用代码块,过程调用以及各种循环结构。还有一条黄金法则:go-to 是有害的。 程序结构应该清晰、流程控制易于理解,这点在今天看来是毋庸质疑的。同时我也认为,结构化编程的想法已经融入后来所有的编程方法论之中。 4.2 面向对象编程(Object oriented programming) 面向对象编程(OOP)方法自然也是从结构化编程思想演化而来。OOP通过封装代码与代码使用的数据来管理软件复杂度。我们习惯于处理真实世界的物理对象,在OOP中,我们可以为真实世界的对象建模(如编写模拟程序,这也是OOP概念开始提出的地方),并对非具体概念如进程、信息组织方法等建立软件模型。 程序里“对象”维护自己的内部状态,这与结构化编程非常地不同。在结构化编程里面,代码是以一种结构化的、容易理解的方式组织,全局共享数据对于软件系统的各个部分都是可见的,包括那些并不需要访问或修改那些共享数据的部分。 4.3 设计模式(Design patterns) 睿智的人关注他们世界的各种模式。学生时候,我们可能会注意班上同学的良好学习习惯所形成的学习模式带给他们优异的成绩。我们学习烹饪时,可能注意到有经验的厨师做菜的模式,如烹饪前先备料,加调料的时候不断的尝一下等。 在软件开发领域,设计模式的使用是基于对某些项目失败而另外类似项目成功的观察(这些也可能是管理模式,计划模式,测试模式等等)。在软件设计过程中,模式的使用是基于对一些通用的设计方式在成功项目中的重复使用的进一步研究的结果。 4.4 极限编程(Extreme programming) 极限编程基于对客户需求的快速确认,快速开发与快速交付使用。极限程序员与客户交流过程中使用简单的设计,并以迭代方式优先开发软件最被需要的部分。 极限编程与传统开发方式背道而驰。传统开发方式是开发者与客户花费大量时间来试图事先将一切细节写入文档,这种开发方式占用相当长的时间。有经验的开发者知道,阶

软件开发知识点

软件开发葵花宝典: 1.面向对象的特征: 抽象:就是忽略一个与主题无关的那些方面,以便更充分地注意与当前目标有关的方面。 包括两个方面:过程抽象和数据抽象 继承:继承是一种联接类的层次模型,并且允许和鼓励类的重用。他提供了一种描述共性的方法。 封装:就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 多态:指允许不同类的对象对同一消息作出的反应。多态性包括参数化多态和包含多态性。 2.string和stringbuffer的区别 相同点:可以储存和操作字符串,string类提供了数值不可变的字符串,stringbuffer提供了数值可变的字符串。 3.运行时异常表示虚拟机的通常操作可能遇到的异常,是常见的错误。Java编译器要求方 法必须声明抛出可能发生的异常,但是并不要求必须声明抛出而没有捕获的异常。 4.Jsp的常用命令:page,include,talib,forwod. 5.何时调用doget和dopost. 当表单提交时method方法设置的是get就用doget。Post就用dopost http get 就调用doget() 6.java的调试如何进行:jdb是java的调试器。Jdb使用java调试器应用程序接口来完成对 本地或者远程的java调试器的调用工作。 7.overload和override的区别。 重写override是父类和子类之间多态性的表现。如果在子类中定义某方法与父类中的方法名称或者参数相同,则成为重写。 重载overload是一个类中多态性的表现。如果在一个类中定义了多个同名的方法,他们有不同的参数个数或者参数类型,则称之为方法的重载。 8.jsp的内置对象及方法 application表示的是javaX.servlet.serverletcontext对象查找有关servlet引擎和servlet环境的信息 request 表示的是httpservletrequest对象包含浏览器的请求 response表示的是httpservletresponse对象包含设置送回浏览器的方法 out 表示的是javax.jsp.jspwirter的示例。并提供了方法使你能用浏览器输出结果pagecontext表示的是javaX.servlet.jsp.pagecontext用于存取各种范围的名字空间,selvlet 相关的对象的API。包装了通用的serlet相关功能的方法。 Config表示的是javaX.servlet.serverletcontext对象该对象用于servlet实例的初始化参数。9. SSH Spring:是一个轻量级的框架,他的核心是控制反转IOC和面向切面aop. IOC是指由容器中控制组件之间的关系。而并非由代码操控。这种将控制权有程序代码到外部容器的转移称为翻转。

IoC和AOP编程计算机毕业论文

IoC和AOP编程计算机毕 业论文 1引言 框架从某种意义上讲是某种应用的半成品,它是由一组组件所构成。对于程序的重用性与所设计的系统的扩展性以达到开发周期的缩减的目的与开发质量的提高等目的,往往是框架一直追求并良好的实现了的。 在软件设计中,最终遵循的还是一个设计理念,就是“高聚,低耦合”。框架一般是将问题分割成若干子问题进行一一攻破,从而起到易于控制、扩展,易于分配资源的效果。设计过程中,常常引入“层”的概念,及将各个义务分层实现。其间难免会出现耦合,而耦合度过高会降低系统的扩展性和维护性。而框架主要工作在层与层之间,很好的解决了这一问题。在软件设计中有一个概念叫做IoC,及控制反转,也叫DI(依赖注入),它主要就是实现层与层之间的松耦合。 面向对象编程在软件设计中无处不在,非常完美的解决了代码重用。但有时候具体的业务贯穿整个系统,而往往这个业务是重复出现的,利用面向对象已不能很好解决。在这里便出现了AOP(面向切面编程),将其中相同的业务抽取出来进行统一解决。在这里不得不说一下Spring框架的强大魅力,Spring对IoC和AOP的操作可谓前无古人。 本文主要利用IoC和AOP的概念,解决层与层之间的依赖关系以及重复业务的处理。 1.1研究背景

上世纪末与本世纪初,J2EE开始盛行,主要归功于它对中间层概念提出了系统性标准。但事实上,它并没有取得实质性的成功,原因主要是因为不管从其效率、难度还是性能上来讲都不孚众望。 在J2EE早期阶段,都是利用EJB技术来开发J2EE应用的。但是,对于EJB,其学习成本非常高也难于理解,而且要想应用EJB技术也是相当困难的。因为EJB强制程序员必须依照它的规去继续各种不同的接口,这样便会导致代码冗余及相似。此外对于其配置既是纷繁复杂又是味同嚼蜡。对于使用JNDI查找对象也是如此。虽然xdoclet的应运而生和缓了其中部分的开发工作,但是EJB存在的各大问题都造成了对其使用的不方便性。随着Java语言的发展,AOP和IoC等技术的逐渐成熟,一种新的J2EE解决方案应运而生,即轻量级框架。[1] 1.2研究平台 本文主要是基于Eclipse平台,使用Java语言编写IoC和AOP的实现程序。 1.2.1Java语言 Java是一种面向对象的,由Sun公司开发的程序设计语言,具体研发是James Gosling及其同事,在上世纪90年代末正式推出。Java的强大之处在于其跨平台性,可在不同操作系统上编写应用软件。Java语言不同于其他编程语言,其优势主要体现在它具有通用、高效、安全等优点。而且该语言的应用领域也极其广泛。在微型电脑、数据中心、超级计算机以及各种网页应用等都能见到Java的身影。虽然Java的编程风格与之C、C++非常接近,但与C语言不同的是,Java是完全的面相对象,对于C++核心的面向对象技术它也是完美的继承了。同时,Java一改C中指针的概念,取而代之的是引用的概念。同时也摒弃了C中运算符重载和多继承等特征。在此基础上,Java 也增加了自己的新特性,就是垃圾回收机制,对于不再引用而又一直在存中的引用进

因此它将面向接口的编程思想贯穿整个系统应用。Spring的

spring是一个设计层面的框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring的orm框架用来集成其他持久层框架,比如hibernate,spring-orm框架对hibernate的session进行了封装,我们可以很方便的通过继承这个封装类HibernateDAOSupport并注入hibernate的sessionFactory完成初始化,并调用其内置对象HibernateTemplate的封装方法来调用session的API而不用考虑到session的初始化和关闭以及事务处理等系统操作,这也是AOP思想的一种体现。Hibernate 的延迟加载功能是指获取某个实体对象时并不从数据库中加载他的关联对象,而在实际获取关联对象的时候才从数据库中加载,这样做很好的节省了数据库资源但是前提是必须保持session处于打开状态,在所有操作完成后再关闭。Spring封装了session操作后很自然的要做到在方法调用的前后打开和关闭session,这样我们在通过HibernateTemplate的方法来获取实体对象以后session就已经关闭了,而这时候在调用获取关联对象的方法的时候就会抛出异常: 一、IoC(Inversion of control): 控制反转 1、IoC: 概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean 二、AOP(Aspect-Oriented Programming): 面向方面编程

相关文档
最新文档