作业1
一.单选题
1、以下不属于ProxyFactoryBean类中的常用可配置属性的是()。
A、target B、proxyInterfaces C、targetClass D、interceptorNames
答案:C
ProxyFactoryBean 是FactoryBean 接口的实现类,FactoryBean 负责实例化一个Bean,而 ProxyFactoryBean 负责为其他Bean创建代理实例。使用 ProxyFactoryBean 是创建AOP 代理的基本方式
2、以下哪种类型不是Spring中的通知类型()。
A、异常通知 B、前置通知 C、后置通知 D、最终通知
答案:D
Spring 的通知类型: 环绕通知:在目标方法执行前后实施增强。可应用于日志。事务管理等。 前置通知:在目标方法执行前实施增强。可应用于权限管理等。 后置通知:在目标方法执行后实施增强。可应用于关闭流。上传文件,删除临时文件等。 异常通知:在方法抛出后实施增强,可应用于处理日常记录日志等。 引介通知:在目标类中添加一些新的方法和属性,可应用于修改老版本程序(增强类)。
3、关于AspectJ注解的介绍,说法错误的是()。
A、@Aspect用于定义一个切面 B、@Pointcut用于定义切入点表达式 C、@Before用于定义前置通知,相当于BeforeAdvice D、@After用于定义后置通知,相当于AfterReturningAdvice
答案:D
4、以下有关CGLIB代理相关说法正确的是()。
A、CGLIB代理的使用非常简单,但它还有一定的局限性——使用动态代理的对象必须实现一个或多个接口 B、如果要对没有实现接口的类进行代理,那么可以使用JDK代理 C、CGLIB是一个高性能开源的代码生成包,在使用时需要另外导入CGLIB所需要的包 D、Spring中的AOP代理,可以是JDK动态代理,也可以是CGLIB代理
答案:C
如果要对没有实现接口的类进行代理,可以使用CGLIB代理。 CGLIB:是一个高性能开源的代码生成包,采用非常底层的字节码技术对指定的目标类生成一个子类,并对子类进行增强。且 在Spring的核心包中已经集成了CGLIB所需的包所以开发中不需要另外导入JAR包。
5、下列有关AOP专业术语中,用于指那些被拦截到的点的是()。
A、Joinpoint B、Pointcut C、Aspect D、Advice
答案:A
6、下列有关AOP专业术语中,用于表示切面与程序流程的交叉点的是()。
A、Joinpoint B、Pointcut C、Aspect D、Advice
答案:B
7、以下关于Spring AOP 的介绍错误的是()。
A、AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程) B、AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,这种采用横向抽取机制的方式,采用OOP思想是无法办到的 C、虽然AOP是一种新的编程思想,采取横向抽取机制,是OOP的升级替代品 D、目前最流行的AOP框架有两个,分别为Spring AOP和AspectJ
答案:C
AOP 的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式。 AOP采取横向抽取机制,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。 目前最流行的AOP框架有两个,分别为Spring AOP和AspectJ。
二.填空题
1、将切面代码插入到目标对象上,从而生成代理对象的过程。
答案:Weaving 或 织入 答案解析:选择第5题
2、目前最流行的AOP框架有两个,分别为SpringAOP和( )。
答案:AspectJ 答案解析:选择第7题
3、AOP采取()抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。
答案:横向 答案解析:同上
4、()的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。
答案:AOP 答案解析:同上
5、AspectJ框架中注解( )用于定义切入点表达式,在使用时还需定义一个包含名字和任意参数的方法签名来表示切入点名称。
答案:@Pointcut 答案解析:选择第3题
6、在Spring配置文件中,< aop:aspect >子元素的( )属性用于指定一个已经存在的切入点名称。
答案:pointcut-ref 答案解析:基于XML的声明式AspectJ
7、在Spring的配置文件中,配置切面使用的是( )元素。
答案:< aop:aspect > 或 aop:aspect 答案解析:同上
8、在Spring中,使用( )是创建AOP代理的基本方式。
正确答案:ProxyFactoryBean 答案解析:选择第1题
9、AOP术语中( )表示AOP框架在特定的切入点执行的增强处理,即在定义好的切入点处所要执行的程序代码。
答案:Advice;通知 答案解析:选择第5题
三.判断题
1、如果在同一个连接点有多个通知需要执行,那么在同一切面中,目标方法之前的前置通知和环绕通知的执行顺序是未知的,目标方法之后的后置通知和环绕通知的执行顺序也是未知的()。
答案:√
2、AspectJ框架中的注解@After用于定义最终final通知,不管是否异常,该通知都会执行()。
答案:√
3、Spring配置文件中的< beans >元素下可以包含多个< aop:config>元素,一个< aop:config >元素中又可以包含属性和子元素,其子元素包括< aop:pointcut >、< aop:advisor >和< aop:aspect >()。
答案:√
4、Spring中的AOP代理默认就是使用CGLIB代理的方式来实现的()。
答案:×
5、使用CGLIB创建代理类,该代理类需要实现MethodInterceptor接口,并实现接口中的intercept()方法()。
答案:√
6、对于使用业务接口的类,Spring默认会使用CGLIB动态代理来实现AOP()。
答案:×
对于使用业务接口的类,Spring默认会使用JDK动态代理来实现AOP
7、Spring AOP中的代理就是由AOP框架动态生成的一个对象,该对象可以作为目标对象使用()。
答案:√
8、AspectJ框架为AOP的实现提供了一套注解,用以取代Spring配置文件中为实现AOP功能所配置的臃肿代码()
答案:√
9、使用AspectJ实现AOP有两种方式:一种是基于XML的声明式AspectJ,另一种是基于注解的声明式AspectJ()。
答案:√
10、Spring 3.0以后,Spring AOP引入了对AspectJ的支持,并允许直接使用AspectJ进行编程,而Spring自身的AOP API也尽量与AspectJ保持一致()。
答案:×
Spring 2.0之后
11、AspectJ是一个基于Java语言的AOP框架,它提供了强大的AOP功能()。
答案:√
12、在Spring中,使用ProxyFactoryBean是创建AOP代理的唯一方式()。
答案:×
ProxyFactoryBean是创建AOP代理最基本的方式
13、Spring中的通知按照在目标类方法的连接点位置,可以分为4种类型()。
答案:×
分为5种类型
14、CGLIB是一个高性能开源的代码生成包,它采用非常底层的字节码技术,对指定的目标类生成一个子类,并对子类进行增强,在使用时需要另外导入CGLIB所需要的包()。
答案:×
不需要另外导包。
15、在Spring中,使用ProxyFactoryBean是创建AOP代理的最基本方式()。
答案:√
16、如果要对没有实现接口的类进行代理,那么可以使用CGLIB代理()。
答案:√
17、GLIB代理的使用非常简单,但它还有一定的局限性——使用动态代理的对象必须实现一个或多个接口()。
答案:×
这是JDK的局限性。
18、AOP手动使用代理模式有两个典型的例子,分别为JDK动态代理和CGLIB代理()。
答案:√
19、AOP专业术语中,切面是指要对哪些Joinpoint进行拦截()。
答案:×
切面是指封装的用于横向插入系统功能(如事务日志等)的类。
20、AOP专业术语中,Target是指代理的目标对象()。
答案:√
21、AspectJ是一个基于Java语言的AOP框架,从Spring2.0开始,Spring AOP引入了对AspectJ的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入()。
答案:√
22、Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类织入增强的代码()。
答案:√
23、目前最流行的AOP框架有两个,分别为Spring AOP和AspectJ()。
答案:√
24、AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后再将这些提取出来的代码应用到需要执行的地方, 是OOP的替代品()。
答案:×
虽然AOP是一种新的编程思想,但却不是OOP的替代屏,它只是OOP的延伸和补充。
25、AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)()。
答案:√
|