spring 依赖注入及 aop 简介

17
LOGO Spring 依依依依依 AOP 依依

Upload: egil

Post on 23-Feb-2016

213 views

Category:

Documents


0 download

DESCRIPTION

Spring 依赖注入及 AOP 简介. Spring 是什么. 一个开源框架 一 个轻量级的 DI 和 AOP 容器框架 如 果将一个 j2ee 构建的应用简单分为表示层、业务逻辑、数据持久层、数据层,我们所熟悉的 ssh 框架中的 struts 用在表示层, hibernate 用在数据持久层,而 spring 则是贯穿整个. 依赖注入和 AOP. 依赖注入( DI ) : Spring 提供了一种松耦合的技术。使用 DI ,对象是被动接受依赖类而不是自己主动去找(不同于“ 委派 ”),对象不是从容器中查找它的依赖类,而是容器在实例化的时候主动加载对象并将其依赖类注入给它 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Spring 依赖注入及 AOP 简介

LOGO

Spring依赖注入及 AOP简介

Page 2: Spring 依赖注入及 AOP 简介

Spring是什么• 一个开源框架• 一个轻量级的 DI 和 AOP 容器框架• 如果将一个 j2ee 构建的应用简单分为表示层、业务逻辑、数据持久层、数据层,我们所熟悉的ssh 框架中的 struts 用在表示层, hibernate 用在数据持久层,而 spring则是贯穿整个

Page 3: Spring 依赖注入及 AOP 简介
Page 4: Spring 依赖注入及 AOP 简介

依赖注入和 AOP

• 依赖注入( DI ): Spring 提供了一种松耦合的技术。使用 DI ,对象是被动接受依赖类而不是自己主动去找(不同于“委派”),对象不是从容器中查找它的依赖类,而是容器在实例化的时候主动加载对象并将其依赖类注入给它• 面向切面( AOP ):通过将业务逻辑从应用服务(如监控和事务管理)中分离出来,实现了内聚开发。应用对象只关心业务逻辑,而不负责系统问题(如日志和事务支持)

Page 5: Spring 依赖注入及 AOP 简介

依赖注入• 在 Spring 的核心配置文件applicationContext.xml 中通过 DI 来装配bean

• applicationContext : bean 工厂,继承了BeanFactory 接口,单例类

• Spring 配置文件是用于指导 Spring 工厂进行Bean 生产、依赖关系注入(装配)及 Bean 实例分发的“图纸”。 Java EE 程序员必须学会并灵活应用这份“图纸”准确地表达自己的“生产意图”。 Spring 配置文件是一个或多个标准的XML 文档

Page 6: Spring 依赖注入及 AOP 简介

依赖注入• bean 元素的作用是,当我们的 spring 框架加载时候, spring 就会自动的创建一个 bean 对象,并放入内存: UserService userSerivce=new UserService();userSerivce.setName(“ 邹方杰 ");

<bean id="userService" class="com.service.UserService"><!-- 这里就体现出注入的概念 . --><property name="name">

<value> 邹方杰 </value></property>

</bean>

属性 id 表示 javabean 的名字 , 与类变量名对应Property 元素设置属性值,容器实例化时候加载类并赋值

Page 7: Spring 依赖注入及 AOP 简介

依赖注入<bean id=“department” class=“*.Department"><property name="empList">

<list><ref bean="emp1" /><ref bean="emp2"/>

</list></property></bean>

<beans> <bean id="foo" class="...Foo"/> <bean id="bar" class="...Bar"/></beans>

对应所依赖类的属性 id

Page 8: Spring 依赖注入及 AOP 简介

依赖注入• DI 也被称为控制反转( IoC ),即我们获得以来对象的方式反转了• 使用 DI ,对象的依赖都是在对象创建时由负责协调应用中各个对象的外部实体提供的。 DI 的关键优点是松耦合• 得到 spring 的 applicationContext 对象( 容器对象 )

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");

UserService us=(UserService) ac.getBean("userService");us.sayHello();

调用 getBean 方法获取 bean实例

Page 9: Spring 依赖注入及 AOP 简介

依赖注入• 依赖反转的实现: Java 的反射机制• spring 实际上是一个容器框架,可以配置各种bean(action/service/domain/dao), 并且可以维护 bean 与 bean 的关系

• 所谓依赖注入(控制反转)就是把创建对象 (bean), 和维护对象 (bean) 的关系的权利从程序中转移到 spring的容器 (applicationContext.xml), 而程序本身不再维护• DI 配合接口编程,的确可以减少层 (web 层 ) 和 业务层的耦合度• bean 的生命周期(略)

Page 10: Spring 依赖注入及 AOP 简介

AOP简介• AOP( aspect oriented programming ) 面向切面 ( 方面 ) 编程 , 是对所有对象或者是一类对象编程 , 核心是 ( 在不增加代码的基础上, 还增加新功能 )• 程序语言发展:面向过程( c 语言)——面向对象( java )——面向切面,编程粒度越来越大,但程序员知道的底层细节被隐藏了

Page 11: Spring 依赖注入及 AOP 简介

AOP简介• 通知 bean

Page 12: Spring 依赖注入及 AOP 简介

创建切面 AOP介绍

定义 AOP 术语 1. 切面 (aspect):要实现的交叉功能,是系统模块化的一个切面或领域。如日志记录。 2.连接点 : 应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出,或者要修改的 字段。 3. 通知 : 切面的实际实现,他通知系统新的行为。如在日志通知包含了实 现日志功能的代码,如向日志文件写日志。通知在连接点插入到应用系统中。 4. 切入点 :定义了通知应该应用在哪些连接点,通知可以应用到 AOP 框架支持的任何连接点。 5.引入 : 为类添加新方法和属性。 6.目标对象 : 被通知的对象。既可以是你编写的类也可以是第三方类。 7. 代理 : 将通知应用到目标对象后创建的对象,应用系统的其他部分不用为了支持代理对象而 改变。 8.织入 : 将切面应用到目标对象从而创建一个新代理对象的过程。织入发生在目标 对象生命周期的多个点上: 编译期:切面在目标对象编译时织入 . 这需要一个特殊的编译器 . 类装载期:切面在目标对象被载入 JVM 时织入 . 这需要一个特殊的类载入器 . 运行期:切面在应用系统运行时织入 .

通知

程序执行切入连接点 通知切入

Page 13: Spring 依赖注入及 AOP 简介

创建通知通知类型 接口 描述Around org.aopalliance.intercept.

MethodInterceptor拦截对目标方法调用

Before Org.springframework.aop.MethodBeforeAdvice

在目标方法调用前调用After Org.springframework.aop.

AfterReturningAdvice在目标方法调用后调用

Throws Org.springframework.aop.ThrowsAdvice

当目标方法抛出异常时调用

Page 14: Spring 依赖注入及 AOP 简介

创建切面 前置通知 public interface MethodBeforeAdvice{ void before(Method m,Object[] os ,Object target){ } }• 该接口提供了获得目标方法、参数和目标对象的机会。不能够改变运行时参数,即不能替换参数对象和目标对象。• 注意在方法结束后不返回任何值东西。原因是该接口返回后,目标方法将会被调用,应该返回目标对象的返回值。• ProxyFactoryBean 是一个在 BeanFactory 中显式创建代理对象的中心类,可以给它一个要实现的接口、一个要代理的目标对象、一个要织入的通知,并且他将创建一个崭新的代理对象。

Page 15: Spring 依赖注入及 AOP 简介

创建切面 定义切入点: 如果不能表达在应用系统的什么地方应用通知的话,通知将毫无用处,这就是切入点的用处。切入点决定了一个特定的类的特定方法是否满足一定的规则。若符合,通知就应用到该方法上。<bean id="xxxService" class="…ProxyFactoryBean"> <property name="proxyInterfaces"> <value>……xxxService</value> </property> <property name="interceptorNames"> <list><value>xxxAdvisor</value></list> </property> <property name="target"><ref bean="xxxTarget" /></property></bean>

Page 16: Spring 依赖注入及 AOP 简介

创建切面• Spring 的目标不是提供最完善的 AOP 实现(虽然 Spring AOP非常强大);而是要提供 AOP实现与 Spring IoC 的紧密集成,以便帮助解决企业应用中的常见问题。• spring 只支持方法连接点:不提供属性接入点, spring 的观点是属性拦截破坏了封装。面向对象的概念是对象自己处理工作,其他对象只能通过方法调用得到私有属性。

Page 17: Spring 依赖注入及 AOP 简介

LOGO