技术培训课件spring培训springioc和aop_第1页
技术培训课件spring培训springioc和aop_第2页
技术培训课件spring培训springioc和aop_第3页
技术培训课件spring培训springioc和aop_第4页
技术培训课件spring培训springioc和aop_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Spring培训Version 1.0 for SVWPresented by: iMonsoft Tech.Created by: Chen YueLast Update: Oct, 2013Spring简介Spring是一个开源框架,是为了解决企业应用开发的复杂性是由Rod Johnson创建的。框架的主要优势之一就是分层架构,使用者可以选择哪个一个组件,同时为 J2EE 应用程序开发提供集成框架。功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。范围:任何Java应用Spring特点开源框架: 可以有效的解决企业级应用。轻量级: 从大小与开销两方面而言Spring都

2、是轻量的。非侵入:在应用中,一般不需要引用springjar包里的类。控制反转Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。面向切面Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务管理)进行内聚性的开发。它们并不负责其它的系统级关注点,例如日志或事务支持。Spring体系架构Spring 在分层中起到作用展现层Webwork/strutsAction,fromBean,配置文件, 模板页面springIoc容器,Aop,Hiber

3、n,事务管理Hibernate映射文件,DOA模式,hibernate接口业务逻辑层持久化层业务对象模型IOCIOCSpring两大核心技术控制反转(Ioc)/依赖注入(DI)面向切面编程Ioc简介控制反转(Ioc)Inversion of Control依赖注入(DI)Dependency In jection 当某个角色(比如一个java实例,调用者)需要另一个角色(另一个java实例,被调用者)协助时,在传统程序过程中,通常由调用者创建被调用的实例 , 但是在spring里 创建被调用者不在调用者来完成,因此称做控制反转,创建被调用者通常是Spring来完成,然后注入调用者,因此也成为依

4、赖注入。Ioc简介Ioc简介Ioc 有两大核心技术一个设计模式1,JDOM2,反射机制3,工厂模式(单例模式)演示Ioc简单实现示例:Spring_Ioc_demoSpring 核心jar包详细介绍Spring3.0 jar属性注入方式使用属性setter方法注入使用构造器注入使用注解注入 1. java annotation 2. spring annotationSetter 注入属性名称Bean引用名称演示Ioc简单实现示例:Spring_Ioc_demo_2构造方法 注入参数值参数类型:任意类型演示Ioc简单实现示例:Spring_Ioc_property_eclipse参数索引注解注

5、入修改 applicationContext.xml xmlns:context= xsi:schemaLocation= /spring-beans-3.0.xsd /spring-context-3.0.xsd/加入对注解的支持得得得java注解注入 Resource 默认引用名称和属性名称相同 Resource(name=“StudentsDao”) 按照指定名称装配Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。Spring 注解注入Autowired 默认按类型装配 Autowired Qualifier(“personDaoBean”) 使用指定名称演示

6、示例:Spring_Ioc_property_eclipse_1Spring 注解注入Autowired 默认按类型装配 Autowired Qualifier(“personDaoBean”) 使用指定名称演示示例:Spring_Ioc_property_eclipse_1 ponent 注解 ponent:注解 等同于applicationContext.xml的Bean 如果 ponent 于applicationContext.xml中定义有相同name的Bean,则或者覆盖前者。 ponent(“指定名称”) ponent 注解Spring3.0 为我们引入组件自动扫描机制,他可以在

7、类型扫描所有的注解 ponent、Service、Controller Repository注解类, 纳入Spring容器管理 Service:业务层组件 Controller :控制层组件 Repository:数据层组件 ponent:泛指组件当组件不好归类时候 使用 ponent组件。演示示例:Spring_Ioc_property_eclipse_1Spring 模拟BeanFactory原理示例:Spring_BeanFactoryBean作用域.singleton 在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,.proto

8、type 每次从容器获取bean都是新的对象。 非单例.request .session .global session示例:Spring_Ioc_scope_eclipse Bean生命周期lazy-init:懒加载init-method :初始化destroy-method :销毁 depends-on:依赖某个bean初始化 Bean生命周期azy-init:懒加载 默认是:false;即在spring容器中启动时并加载实例化配置文件中所有的bean。当我们每个bean都有同样属性 可以在配置定义全局的或 Bean生命周期init-method /destroy-method 指定Bea

9、n初始化方法 init-method 属性属性和销毁方法属性destroy-method 调用spring容器的close方法进行关闭才执行销毁方法。 Bean生命周期depends-on:依赖某个bean初始化 在实例化这个Bean之前,先实例化depends-on 所指定bean示例:Spring_Ioc_LifeCycle Bean的ID属性和name属性区别Id:必须满足XML命名规范,因此XML做了限定,相当于java变量命名:不能以数字,符号打头 ,不能有空格如123,?2,ab 等都是不规范的,spring在初始化的时候就会抛错。Name: 没有限制,但是不能带空格, 初始化的时

10、候不会抛错但是获得Bean时候会抛错。 Bean的ID属性和name属性区别配置文件中不能出现两个Id相对,否则就会抛错但是可以出现两个相对Name,getBean返回实例,后一个返回,前一个名称重复的被覆盖Name:属性可以用逗号隔开指定多个名字 如 前提 必须是singleton如果Id和name都没有指定,全类名做为name可以通过com.sp.dao.impl.StudentsDaoImpl” 获得实例 抽象Bean继承如果多个bean存在相同的配置信息,spring允许我们定义一个父,子将自动继承父的配置信息。 动态代理代理模式是常用的java设计模式,代理类和委托类有同样的接口,代

11、理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类 ,以及事后的处理消息,一个代理类的对象和一个委托对象的关联,代理类本身真正产生服务,而是通过调用委托类对象相的关方法,来提供服务。 动态代理动态代理类的字节码在程序运行时由java反射机制动态生成,无需手写代码完成,动态代理不简化编程工作而且提高了扩展性,可以生成任意类型代理类。动态代理包含一个类一个接口: public interface InvocationHandlerpublic Object invoke(Object proxy, Method method, Object args) throws Throwable

12、参数说明:Object proxy:指被代理的对象Method method:要调用方法Object args:方法调用时需要的参数 动态代理Proxy类 完成代理的操作类,可以通过此类为一个或多个接口动态生成实现类,提供操作方法:Public static Objecet newProxyInsatance (ClassLoader loader, Class interfaces, InvocationHandler h) throws legalArgrumentException参数说明:ClassLoader loader :类加载器Class interfaces :得到所有接口I

13、nvocationHandler h :得到接口子类实例 动态代理类加载器主要有三种类加载器Booststrop ClassLoader :采用C+编写 一般开发看不到Extends ClassLoader:扩展器加载类 一般对应jrelibext目录的类App ClassLoader: (默认)加载classpath指定类,是最常用的加载器示例:Spring_Ioc_Proxy 动态代理动态代理是依靠接口实现的,如果没有实现接口则不能用动态代理,如果使用cglib动态代理。使用动态代理好处:对请求进行任何处理什么情况下使用动态代理:不允许直接访问某些类;对访问要做特殊处理等Cglib是针对类

14、来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中的方法实现增强,因为是继承,所以不能对final修饰的类进行代理。 CGlib动态代理MethodInterceptor接口public Object intercept(Object proxy, Method method, Object args,MethodProxy methodProxy) throws Throwable参数说明:Object proxy:代理对象Method method :拦截的方法 Object args :方法参数MethodProxy methodProxy: 拦截器 CGlib动态代理pub

15、lic class CGLIBProxy implements MethodInterceptor private Object targetObject;/代理的目标对象public Object createProxyInstance(Object targetObject)this.targetObject = targetObject;Enhancer enhancer = new Enhancer();/该类用于生成代理对象enhancer.setSuperclass(this.targetObject.getClass();/设置父类enhancer.setCallback(thi

16、s);/设置回调用对象为本身return enhancer.create();public Object intercept(Object proxy, Method method, Object args,MethodProxy methodProxy) throws Throwable return methodProxy.invoke(this.targetObject, args);CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。 AOP 简介AOP (Aspet Oriented Programming) 他是一种设计模式,用于实现系统中某一个方面的应用用于:日志

17、拦截 授权认证 事务拦截 方法缓存 数据审计 AOP 简介逻辑处理逻辑处理逻辑处理日志管理安全检查事务处理授权管理模块软件管理模块用户管理模块AOP 简介切面(Aspect) 切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,spring AOP就是负责实施 切面的框架,它将切面定义的横切连接点(Joinpoint):程序执行的某个特定位置:比如类开始初始化前、类初始化后、某个方法调用前、调用后等。一个类或一段程序代码拥有的一些具有边界性质的特定切点(Pointcut):匹配连接点(Joinpoint)的断言。连接点相当于数据记录,切点相当于查询条件,一个切点可以匹配多个连接点。通知增强(Advice):在拦截Joinpoint之后,通知分为前置通知、后置通知、异常通知、最终通知、环绕通知。目标对象(Target): 代理的目标对象织入(Weaving):将增强添加到对目标类具体连接点上的过程。引入(Introduction)引入是一种特殊的增强,为类添加一些属性和方法。通过它可以动态的为业务类增加接口的实现逻辑,让业务类成为这个接口的实现类。 AOP实现方式代理实现: 示例:Spring_Aop_Proxy自动代理实现:示例:Spring_Aop_AutoProxyAspectJ方式实现: 示例:Spring_Aop_Aspect

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论