1、 企业级开发 全书教案教学设计 课程名称:企业级开发 章节名称:Spring入门 北京智酷道捷教育科技有限公司 2020年01月 目 录 一、 基本说明 2 二、 教学目标 2 三、 教学重点 2 四、 教学难点 3 五、 教学方法 3 六、 教学准备 3 七、 教学过程 3 八、 板书设计 11 九、 教具 11 十、 教学反思 11 一、 基本说明 1. 授课班级: 2. 授课人数: 3. 教
2、学时间: 4. 课时:6课时 5. 课型:理论+实践 二、 教学目标 1. 知识与技能 Ø 通过自主学习本课程,学生能够了解框架的概念。 Ø 通过自主学习本课程,学生能够了解SSM框架的概念及用途。 2. 过程与方法 Ø 通过学习本课程,学生们可以学会配置Spring框架的方法。 Ø 通过学习Spring框架的IoC和DI技术,学生能够进一步掌握Spring框架的使用方法。 3. 情感、态度、价值观 Ø 通过探究学习Spring框架的IoC和DI技术,学生能够更好地将软件分层,并使用合适的框架大大提高开发效率,将主要精力放在业务逻辑的处理上。 三、 教学重点 Ø J
3、avaWeb经典三层架构。 Ø IoC的实现原理。 Ø IoC注意事项。 Ø 自动装配。 四、 教学难点 Ø 如何让学生理解和掌握自动装配。 五、 教学方法 Ø 边讲边练:教师以边讲边练的方式,一边介绍Web的应用、框架、Spring的配置、IoC和DI的相关内容,一边通过代码演练,让学生巩固所学知识。通过本节课的学习,学生可更深入地了解Spring,为以后的学习打下坚实基础。 六、 教学准备 1. 学生准备 Ø Windows操作系统。 Ø MyEclipse安装包。 Ø Spring相关jar包。 2. 教师准备 Ø Windows操作系统。 Ø MyEcli
4、pse安装包。 Ø Spring相关jar包。 七、 教学过程 1. 导入新课 (1)进入主题,展开详细讲解 本节课我们首先介绍Web的应用,包括Web概述、Web资源分类、Servlet容器、Web容器、Web服务器和JavaWeb经典三层架构等内容;其次介绍框架相关知识,包括Java常用框架和Spring框架内容;接着介绍了Spring的配置,包括导入Spring的IoC相关jar包、创建Spring的配置文件和快速生成xml模板等内容;最后介绍IoC和DI的相关知识。通过本节课的学习,学生可更深入地了解Spring,为以后的学习打下坚实基础。 (2)明确学习目标 Ø 了解框
5、架的概念。 Ø 了解SSM框架的概念。 Ø 了解Spring框架的用途。 Ø 理解Spring的IoC。 Ø 理解Spring的DI。 2. 讲授课程 (1)Web概述 Web是互联网的总称,全称为World Wide Web,缩写为WWW,也被称为全球广域网或万维网,是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。 1)Web资源分类 Web资源分为两大类:静态Web资源和动态Web资源。 静态Web资源是指Web页面上中供人们浏览的数据始终是不变的,如Html、CSS、JavaScript等 动态Web资源是指Web页面中供人们浏览的数
6、据是由程序产生的,不同时间点访问Web页面看到的内容各不相同,如JSP/Servlet、ASP、PHP。 2)Servlet容器 能够运行Servlet/JSP程序的环境就叫做Servlet容器。Servlet容器(Servlet Container)是Web服务器或者应用服务器的一部分,用于提供基于请求/响应发送模式的网络服务,解码基于MIME的请求,并且格式化基于MIME的响应。 3)Web容器 Web资源按照一定的规则整合起来组成能够被Web访问的应用程序,这些应用程序叫做Web应用。Web应用运行也需要一定的环境,能够运行Web应用的环境就叫做Web容器。 4)Web服务器
7、 Web容器/Servlet容器具体来说就是Web服务器,学习Web开发,需要先安装一台Web服务器,然后在Web服务器中开发相应的Web资源,供用户使用浏览器访问。 5)常见的Web服务器 l WebLogic WebLogic服务器是BEA公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范。它是一种多功能、基于标准的Web应用服务器,为企业构建自己的应用提供了坚实的基础。 l WebSphere WebSphere服务器是IBM公司的产品,支持J2EE规范,它是一种功能完善、开放的Web应用程序服务器。 l Tomcat 在小型的应用系统或者有特殊需要的系统中,可以
8、使用一个免费的Web服务器:Tomcat,该服务器支持全部JSP以及Servlet规范。 6)Servlet概述 Servlet(Servlet Applet),全称Java Servlet,称为小服务程序或服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性。而这些Servlet都要实现Servlet接口。Servlet运行于支持Java的应用服务器中。Servlet主要功能在于交互式的浏览和修改数据,生成动态Web内容。 7)JavaWeb分层概述 要想实现一个好的Web应用,我们必须要了解JavaWeb分层。在软件体系架构设计中,分层式结构是最常见、也是最重要的
9、一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又称为领域层)和表示层。这也是Java Web中重要的三层架构中的三个层次。 8)JavaWeb经典三层架构 JavaWeb经典三层架构是JavaWeb独有的,三层包括表示层(Web)、业务逻辑层(Service)和数据访问层(DAO)。 Web层:表示层,主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。 Service层:业务逻辑层,相对具体的业务逻辑服务层。 DAO层:数据访问层,与底层 MySQL、Oracle、Hbase 等进行数据交互。 (2)框架概述 框架(Fr
10、amework)是构成一类特定软件可复用设计的一组相互协作的类。框架规定了应用的体系结构,它定义了整体结构、类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程。框架预定义了这些设计参数,以便于应用设计者或实现者能集中精力于应用本身的特定细节。 1)Java常用框架概述 l SSH SSH框架组合主要包括Struts2、Spring、Hibernate三大框架。 l SSM 随着技术的发展,目前比较流行的SSM框架主要包括SpringMVC、Spring、Mybatis三大框架。 2)Spring框架概述 Spring框架是一个开放源代码的J2EE应用程序框架,由Ro
11、d Johnson发起,是针对bean的生命周期进行管理的轻量级容器。 几个重要的概念: IoC:控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 DI:依赖注入,组件之间的依赖关系由容器在运行期决定,即由容器动态地将某个依赖关系注入到组件之中。 AOP:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能统一维护的一种技术。 (3)Spring框架的配置 在Java中,要使用Spring框架必须先进行Spring框架配置。我们可以到Spring官网下载对应的jar包,导入后就可以使用Spring框架了。 1)导入Spring的IoC相关jar
12、包 2)创建Spring框架的配置文件 在Java中,Spring框架采用xml文件作为配置文件,xml文件的名字任意,一般取名为applicationContext.xml,通常将该文件放置在类加载的目录下(src目录),方便后续使用。 3)配置Spring框架的约束 Spring框架本身是基于xml配置来工作的,在使用Spring框架的过程中不可避免要编写大量xml配置。Spring官方提供了这些xml文件的编写规范,这是通过提供xml的约束文件来实现的。 所谓xml的约束文件其实是一种限定xml文件写法的技术,主要分为两种: l DTD:通常文件的后缀为.dtd。 l Sc
13、hema:通常文件的后缀为.xsd。
4)将Spring的约束文件交给MyEclipse管理
5)通过xml约束文件生成符合约束格式的xml
6)快速生成xml模板
(4)IoC
IoC称之为控制反转,简单来说就是将对象的创建及对象生命周期管理的过程交由Spring框架来处理,从此在开发过程中不再需要关注这些细节,而是在需要时由Spring框架提供处理,这样的机制称之为控制反转。
1)IoC入门案例
我们通过一个IoC入门案例介绍如何使用IoC。
2)IoC的实现原理
在初始化一个Spring容器时,Spring框架会去解析指定的xml文件,当解析到其中的
14、会根据该标签中Class属性指定的类的全路径名,通过反射创建该类的对象,并将该对象存入内置的Map中管理。其中键就是该标签的id值,值就是该对象。
当通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中寻找是否有匹配的键值对,如果有则将该键值对中保存的对象返回,如果没有匹配到则抛出异常。
3)IoC注意事项
l 默认情况下,多次获取同一个id的bean,得到的将是同一个对象。
l 即使是同一个类,如果配置过多个
15、置多个相同id的
16、 通过静态工厂创建对象。 l 通过实例工厂创建对象。 l 通过Spring工厂创建对象。 7)Spring单例模式 Spring容器管理的bean在默认情况下是单例模式的,即一个bean只会创建一个对象,存在内置Map中,之后无论获取多少次该bean,都返回同一个对象。Spring默认采用单例方式,减少了对象的创建,从而减少了内存的消耗。 但在实际开发中,是存在多例需求的,Spring也提供了选项可以将bean设置为多例模式。 8)Spring懒加载机制 Spring懒加载机制可以规定指定的bean不在启动时立即创建,而是在后续第一次使用时才创建,从而减轻在启动过程中对时间和内存
17、的消耗。 懒加载机制只对单例模式bean有作用,对于多例模式bean设置懒加载没有意义。 9)配置初始化和销毁方法 在Spring中,如果某个bean在初始化之后或销毁之前要做一些额外操作时,可以为该bean配置初始化和销毁的方法,在这些方法中完成功能。 方法执行顺序:在Spring创建bean对象时,先创建对象(通过无参构造或工厂),然后立即调用init方法来执行初始化操作,最后此bean就可以调用其他普通方法,而在对象销毁之前Spring容器调用其destory方法来执行销毁操作。 (5)DI 在创建对象的过程中Spring可以依据配置对对象的属性进行设置,这个过程称之为依赖注
18、入,也就是DI。
1)set方法注入
通常的javabean属性都会私有化,而对外暴露setXxx()和getXxx()方法,此时Spring可以通过setXxx()方法将属性的值注入对象。
set方法注入注意事项:
l 如果没有提供set方法,那么就会报错。
l 如果添加了新的类属性,那么需要再提供set、get方法和toString方法。
2)自动装配
在Spring的set方式实现的注入过程中,支持自动装配机制。所谓自动装配机制,是指根据要设置的javabean属性的名字或类型到Spring中自动寻找对应id或类型的
19、 3)构造方法注入 我们也可以通过构造方法传入并设置对象的属性。Spring也可以通过这样的构造方法实现属性的注入。 3. 巩固练习 无 4. 课堂小结 通过本节课的学习,学生们可以了解框架的作用和常用的框架,掌握配置Spring框架的方法,并且通过xml文件配置,使用Spring中的IoC和DI技术。对于IoC和DI,我们后面还会通过注解的方式学习。使用IoC和DI可以更好地将软件分层,而使用合适的框架可以大大提高开发效率,让程序员将主要精力放在业务逻辑的处理上。 5. 布置作业 (1)课下作业 1)配置Spring框架,并使用IoC和DI创建对象。 2)复习反射机制。
20、 (2)预习作业 1)Java中注解的使用方式。 2)Spring中注解实现IoC和DI。 八、板书设计 九、教具 Ø MyEclipse 十、 教学反思 课程名称:企业级开发 章节名称:注解方式使用Spring 北京智酷道捷教育科技有限公司 2020年01月 目 录 一、 基本说明 2 二、 教学目标 2 三、 教学重点 2 四、 教学难点 3 五、 教学方法 3 六、 教学准备 3 七、 教学过程 3 八、 板书设计 12 九、 教
21、具 12 十、 教学反思 12 八、 基本说明 6. 授课班级: 7. 授课人数: 8. 教学时间: 9. 课时:6课时 10. 课型:理论+实践 九、 教学目标 4. 知识与技能 Ø 通过自主学习本课程,学生能够理解注解的使用场景。 Ø 通过自主学习本课程,学生能够熟练地定义和使用注解。 5. 过程与方法 Ø 通过练习注解的相关案例,学生可以熟练使用注解的方式实现Spring的IoC和DI。 6. 情感、态度、价值观 Ø 通过探究学习并完成软件的分层练习,学生能够理解利用Spring中的IoC和DI实现软件分层的方法,可以
22、更深入地了解注解的使用,为以后的学习打下坚实基础。 十、 教学重点 Ø 注解添加属性。 Ø 元注解。 Ø 使用反射注解控制程序流程。 Ø Spring注解方式实现IoC。 Ø Spring注解方式实现DI。 Ø 注解注入自定义类型数据。 Ø 类的实例注入到Spring容器。 Ø 使用Spring中IoC和DI实现软件分层解耦。 十一、 教学难点 Ø 如何让学生理解和掌握用注解添加属性的方法。 Ø 使用Spring中IoC和DI实现软件分层解耦。 十二、 教学方法 Ø 边讲边练:教师以边讲边练的方式,一边介绍注解的应用和如何使用注解的方式实现IoC和DI等内容,一边通
23、过代码演练,让学生巩固所学知识。通过本节课的学习,学生可以更深入地了解注解的使用,为以后的学习打下坚实基础。 十三、 教学准备 3. 学生准备 Ø Windows操作系统。 Ø MyEclipse安装包。 Ø Spring相关jar包。 4. 教师准备 Ø Windows操作系统。 Ø MyEclipse安装包。 Ø Spring相关jar包。 十四、 教学过程 6. 导入新课 (1)回顾上节课内容并答疑解惑 回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。 (2)进入主题,展开详细讲解 本节课我们首先介绍注解的应用,包括注解概述、JDK
24、内置注解、自定义注解、元注解和反射注解等内容;接着介绍使用注解的方式实现IoC和DI,包括Spring引入Context名称空间、使用Spring注解方式实现IoC、使用Spring注解方式实现DI、注入自定义类型数据和类的实例注入到Spring容器等内容。通过本节课的学习,学生可以更深入地了解注解的使用,为以后的学习打下坚实基础。 (3)明确学习目标 Ø 理解注解的使用场景。 Ø 熟练地定义和使用注解。 Ø 熟练使用注解的方式实现Spring的IoC和DI。 Ø 理解利用Spring中的IoC和DI实现软件分层。 7. 讲授课程 (1)注解 在Java中,注解(Annotat
25、ion)是用来描述Java代码的元信息,它将一个类的外部信息和内部成员联系起来,在编译、运行时进行解析和使用。 1)注解概述 注解是JDK5.0引入的一种注释机制,它是给程序的提示信息,程序可以根据有无注解及注解上属性的不同配置执行不同的逻辑。 Java中的注解格式: @AnnoName(key=value,...) 2)JDK内置注解举例 l @Override 声明重写父类方法的注解,要求编译器帮我们检查是否成功地覆盖,如果没有成功覆盖父类方法,编译器将会进行报错提示。 l @Deprecated 声明方法被过时,不再建议使用,要求编译器在编译的过程中对于调用这样的方法提
26、出警告,提示方法过时。 l @SuppressWarnings 压制警告,提示编译器,在编译的过程中对指定类型的警告不再提示。 3)自定义注解 自定义注解的格式: @interface{ } 4)注解添加属性 在自定义注解中添加属性时,需要注意以下事项: l 注解中所有的属性必须是public修饰,可以显式声明,也可以不声明,不声明默认还是被public修饰。 l 注解中的属性只能是八种基本数据类型、String类型、Class类型、枚举类型、其他注解类型及以上类型的一维数组。 l 注解中声明的属性需要在使用注解时为其赋值。赋值的方式是使用注解时,在注解后跟一对小括号,在
27、其中通过“属性名=属性值”的方式指定属性的值。 l 声明注解时,在注解的属性后通过default关键字声明属性的默认值。 l 如果属性是一维数组类型,而在传入的数组中只有一个值,则包括数组的大括号可以省略。 l 如果注解的属性只有一个需要赋值,且该属性的名称叫做value,则在使用注解时“value=”可以省略。 5)元注解 元注解是用来修饰注解声明的注解,可以控制被修饰注解的特性。 元注解共分为四类,分别为: l @Target 用来声明被修饰的注解可以用在什么位置,例如限制注解使用在类、接口、枚举、变量、方法、参数、构造方法或包等位置。 l @Retention 用来声
28、明被修饰的注解会被保留的阶段,总共分为三个阶段:元码阶段、编译阶段和运行阶段。
l @Documented
用来声明被修饰注解是否要被文档提取工具提取到文档中。
l @Inherited
用来声明被修饰的注解是否具有继承性。
6)反射注解
RetentionPolicy.RUNTIME级别的注解会保留到运行期间,可以通过反射技术获取注解的内容,从而可以根据是否有注解或注解属性值的不同控制程序按照不同的方式运行。
类Class
29、lean isAnnotationPresent(Class extends Annotation>annotationClass) 如果指定类型的注解存在于此元素上,则返回true,否则返回false A getAnnotation(Class annotationClass) 如果存在该元素的指定类型的注解,则返回这些注解,否则返回 null Annotation[] getAnnotations() 返回此元素上存在的所有注解 (2)注解实现IoC和DI Spring除了默认使用xml配置文件的方式实现配置之外
30、也支持使用注解方式实现配置,这种方式效率更高、配置信息更清晰、修改更方便,所以推荐使用。
1)Spring引入context名称空间
在IDE中导入spring-context-3.2.xsd约束文件。
在applicationContext.xml文件中,引入该schema文件
2)Spring注解方式实现IoC
l 开启包扫描
要使用Spring注解方式实现IoC,首先要开启包扫描,即只有在指定的扫描包下的类上的IoC注解才会生效。
l 使用注解注册bean
在配置的包中的类上使用@Component注解,则这个类会自动被注册为bean,使用当前类的class为 31、>的class,通常情况下使用类名首字母小写为 32、xsd交给IDE管理,在当前Spring容器的配置文件中导入util名称空间,再通过适当的util标签注册数据,最后在类的属性中使用@Value注入赋值。
4)注解注入自定义类型数据
l 在bean中的属性上通过@Autowired实现自定义bean类型的属性注入。
l 使用@Qualifier(value=“id")注解,明确地指定要注入哪个id的bean。
l 使用@Resource(name=“id")指定注入给定id的bean。
5)其他常用注解
l @Scope(value="prototype")/@Scope(ConfigurableBeanFactory.SCOP 33、E_PROTOTYPE)
配置修饰类的bean是单例还是多例,如果不配置默认为单例。
l @Lazy
配置修饰的类的bean采用懒加载机制。
l @PostConstruct
修饰方法,将该方法声明为初始化方法,对象创建之后立即执行。
l @PreDestroy
修饰方法,将该方法声明为销毁的方法,对象销毁之前调用的方法。
6)类的实例注入到Spring容器
此前我们使用@Component注解修饰类,其实@Controller、@Service和@Repository三个注解的功能与@Component完全相同。这四个注解都用来修饰类,将类的实例注入到Spring容器。
34、因为Java软件分层,分层后要保证业务逻辑不混乱和代码的可读性高,所以分为四个注解。下面介绍这四个注解的区别:
l @Component:一般认为是通用的注解。
l @Controller:用在软件分层中的表示层。
l @Service:用在软件分层中的业务逻辑层。
l @Repository:用在软件分层中的数据访问层。
8. 巩固练习
使用Spring中的IoC和DI实现软件分层解耦。
9. 课堂小结
通过本节课的学习,学生们可以更进一步理解Spring框架中IoC和DI的作用以及用法。此外,我们还介绍了注解的使用方式,在今后的学习中注解会大量使用,通过这些内容的学习,可以 35、使学生对于程序的“低耦合”要求有更深的理解,并且通过代码的编写,来提高动手能力。
10. 布置作业
(1) 课下作业
Ø 填空题
1) RequestMapping注解类型用于映射 。
2) 在使用Spring MVC的注解开发时,除了需要引入Spring的核心JAR包、Commons-logging的JAR包以及Spring MVC的2个JAR包外,还需要引入
的JAR包。
3) 在视图解析器配置中,可以设置视图的 。
4) 如果没有通过< init-param>元素配置,则应用程序会默认去 寻找配置文件。
5) 36、如果 < load-on-startup>元素不存在,则应用程序会 加载该Servlet。
Ø 判断题
1)在控制器类中,每一个请求处理方法都可以有多个不同类型的参数,以及一个多种类型的返回结果。( )
2) @RequestMapping的method属性必须使用。( )
3) @RequestMapping(method = RequestMethod.GET)可以缩写为@GetMapping。( )
4) @RequestMapping注解的属性都是可选属性。( )
5) Web.xml文件中必须使用标签元素,否则文件会报错。( )
Ø 单 37、选题
1)下面类型中,不属于请求处理方法参数类型的是( )。
A. javax.servlet.http.HttpSession
B. @MatrixVariable
C. org.springframework.ui.Model
D. void
2)下面关于组合注解的说法正确的是( )。
A. 组合注解是Spring3.x版本中的新特性
B. 组合注解可以简化常用的HTTP方法的映射
C. 在所有的Spring项目中,使用组合注解可以替代@RequestMapping注解
D. @GetMapping注解可以用来匹配GET和POST方式的请求
3)下面关于@Re 38、questMapping注解说法错误的是( )。
A. @RequestMapping注解的默认属性是value
B. @RequestMapping注解的value属性值可以省略
C. @RequestMapping注解的value属性名可以省略
D. @RequestMapping注解的value属性必须标注
4)下面关于 < load-on-startup>元素说法错误的是( )。
A. 如果< load-on-startup>元素的值为1,则在应用程序启动时会立即加载该Servlet
B. 如果< load-on-startup>元素不存在,则应用程序会在第一个S 39、ervlet请求时加载该Servlet
C. 如果< load-on-startup>元素的值为1,则在应用程序启动时会延迟加载该Servlet
D. < load-on-startup>元素是可选的
Ø 简答题
请简述ModelAndView、String和void三种返回类型的作用。
(2)预习作业
1)代理设计模式。
2)Spring中的AOP。
八、板书设计
九、教具
Ø MyEclipse
十、教学反思
课程名称:企业级开发
章节名称:代理设计模式
40、
北京智酷道捷教育科技有限公司
2020年01月
目 录
一、 基本说明 2
二、 教学目标 2
三、 教学重点 2
四、 教学难点 2
五、 教学方法 3
六、 教学准备 3
七、 教学过程 3
八、 板书设计 11
九、 教具 11
十、 教学反思 12
十五、 基本说明
11. 授课班级:
12. 授课人数:
13. 教学时间:
14. 课时:6课时
15. 课型:理论+实践
十六、 教学目标
7. 知识与技能
Ø 通过自主学习本课程,学生能够理解静态代理模式。
Ø 通过自主学习本课程 41、学生能够理解动态代理模式。
8. 过程与方法
Ø 通过练习相关案例,学生可以掌握使用代理模式修改案例的方法。
9. 情感、态度、价值观
Ø 通过探究学习代理设计模式的相关知识及应用,学生能够理解静态代理模式和动态代理模式,并了解它们的优缺点,为以后的学习打下坚实基础。
十七、 教学重点
Ø 静态代理模式的构成。
Ø 使用静态代理模式对“Java经典三层架构练习”案例进行优化。
Ø 使用jdk内置的动态代理模式对“Java经典三层架构练习”案例进行优化。
Ø 使用cglib动态代理模式对“Java经典三层架构练习”案例进行优化。
十八、 教学难点
Ø 使用静态代理模式对“ 42、Java经典三层架构练习”案例进行优化。
Ø 使用jdk内置的动态代理模式对“Java经典三层架构练习”案例进行优化。
Ø 使用cglib动态代理模式对“Java经典三层架构练习”案例进行优化。
十九、 教学方法
Ø 边讲边练:教师以边讲边练的方式,一边介绍静态代理模式和动态代理模式的相关知识,一边通过代码演练,让学生巩固所学。通过本节课的学习,学生可以更深入地了解代理模式的使用,为以后的学习打下坚实基础。
二十、 教学准备
5. 学生准备
Ø Windows操作系统。
Ø MyEclipse安装包。
Ø Spring相关jar包。
6. 教师准备
Ø Windows操作 43、系统。
Ø MyEclipse安装包。
Ø Spring相关jar包。
二十一、 教学过程
11. 导入新课
(1)回顾上节课内容并答疑解惑
回顾上一节课的内容,并对上一节课布置的作业以及学生提出的问题进行答疑解惑。
(2)进入主题,展开详细讲解
本节课我们主要学习代理设计模式的相关知识,代理设计模式分为静态代理模式和动态代理模式。首先介绍静态代理模式,包括设计模式的优点、静态代理模式的构成和静态代理模式的特点等;接着介绍动态代理模式,包括JDK内置动态代理和cglib实现的动态代理等。本节课案例练习比较多,我们可以通过这些实践内容来掌握这两种代理设计模式。
(3)明确学习目 44、标
Ø 理解静态代理模式。
Ø 理解动态代理模式。
Ø 能够使用代理模式修改案例。
12. 讲授课程
(1)静态代理设计模式
静态代理设计模式是由程序员创建或特定工具自动生成源代码的,也就是在编译时就已经将接口、被代理类和代理类等确定下来。在程序运行之前,代理类的.class文件就已经生成了。
1)代理设计模式概述
代理设计模式是Java常见的设计模式之一。代理设计模式的定义是为其他对象提供一种代理,以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理设计模式分为静态代理设计模式和动态代理设 45、计模式两种。
2)代理设计模式优点
l 职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一切事务,附带的结果就是编程简洁清晰。
l 保护目标对象
代理对象可以在客户端和目标对象之间起到中介的作用,从而保护目标对象。
l 高扩展性
将调用对象和被调用对象分离,一定程度上降低了耦合度,扩展性好。
3)案例分析
我们以“Java经典三层架构练习”案例的service层中Userservicelmpl.java文件的代码为例介绍添加需求的应用。
4)静态代理模式构成
静态代理模式由三个部分构成:
l 一个公共的接口。
l 一个代理角色 46、
l 一个被代理角色。
5)静态代理模式的优缺点
静态代理模式的优点:结构清晰,易于理解。
静态代理模式的缺点:如果被代理者有多个方法,则代理者也需要开发多个方法,其中往往存在大量重复的代码。
(2)动态代理模式
动态代理模式是Java语言中非常经典的一种设计模式,也是所有设计模式中最难理解的一种。本节将通过理论结合案例的形式,让学生充分理解和应用动态代理模式。
1)动态代理-JDK内置的动态代理
JDK中提供了动态代理实现的工具类,直接使用该工具类可以创建出代理者,并且可以通过内置的回调函数指定代理在工作时的执行逻辑,从而实现基于JDK原生API的动态代理机制。
Prox 47、y的常用方法:
static Object newProxyInstance(ClassLoader loader, Class>[] interfaces, InvocationHandler h):返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
2 )JDK内置动态代理的优缺点
JDK内置动态代理的优点为:
不需要像静态代理一样被代理方法都要实现一遍,而只需要在回调函数中进行处理就可以了,重复代码只需编写一次。
JDK内置动态代理的缺点为:
Java的动态代理是通过代理者实现和被代理者相同的接口来保证两者具有相同的方法的,如果被代理者想要被代理 48、的方法不属于任何接口,则生成的代理者自然无法具有这个方法,也就无法实现对该方法的代理。
所以Java的动态代理机制是基于接口进行的,受制于要代理的方法是否有接口的支持。
3)动态代理-cglib实现的动态代理
cglib提供的动态代理通过继承父类来实现动态代理,它是第三方提供的动态代理的实现工具,不管有没有接口都可以实现动态代理。cglib实现动态代理的原理是生成的动态代理是被代理者的子类,所以代理者具有和父类即被代理者相同的方法,从而实现代理。
4)cglib动态代理的优缺点
cglib动态代理的优点为:
无论是否有接口都可以实现动态代理,使用场景基本不受限制。
cglib动态 49、代理的缺点为:
第三方提供的动态代理机制,不是原生的,需要导入第三方开发包才可以使用。
13. 巩固练习
(1) 使用静态代理模式对“Java经典三层架构练习”案例进行优化。
(2) 使用JDK内置的动态代理模式对“Java经典三层架构练习”案例进行优化。
(3) 使用cglib动态代理模式对“Java经典三层架构练习”案例进行优化。
14. 课堂小结
通过本节课的代理设计模式内容的学习,可以让学生理解代理设计模式分为静态代理和动态代理两种。静态代理的代码需要自己实现,并且会有重复代码。动态代理又分为JDK内置的动态代理和cglib的动态代理。JDK内置的动态代理是基于接口实现的 50、如果方法不属于接口,则不能使用内置的动态代理;cglib是第三方提供的动态代理实现工具,不管有没有接口都可以实现动态代理。
15. 布置作业
(1) 课下作业
Ø 单选题
1)动态代理中,代理实例的调用程序实现的接口是( )?
A. Proxy
B. InvocationHandler
C. ClassLoader
D. 以上都不是
2)动态代理中,提供创建动态代理类和实例静态方法的是( )?
A. Proxy
B. InvocationHandler
C. ClassLoader
D. 以上都不是
3)关于代理模式说法错






