撩课-Java每天5道面试题第22天
141.Spring AOP是什么?
AOP:面向切面编程
AOP技术利用一种称为“横切”的技术,
解剖封装的对象内部,
并将那些影响了多个类的公共行为
封装到一个可重用模块,
这样就能减少系统的重复代码,
降低模块间的耦合度,
并有利于未来的可操作性和可维护性。
AOP把软件系统分为两个部分:
核心关注点
和横切关注点。
业务处理的主要流程是核心关注点,
与之关系不大的部分是横切关注点。
横切关注点的一个特点是,
他们经常发生在核心关注点的多处,
而各处都基本相似。
比如权限认证、日志、事务处理。
142.说说AOP实现原理
AOP:
这里的AOP指的是面向切面编程思想,
而不是Spring AOP
主要的的实现技术主要有
Spring AOP和AspectJ。
、AspectJ的底层技术。
AspectJ的底层技术是静态代理,
即用一种AspectJ支持的特定语言编写切面,
通过一个命令来编译,
生成一个新的代理类,
该代理类增强了业务类,
这是在编译时增强,
相对于下面说的运行时增强,
编译时增强的性能更好。 Spring AOP Spring AOP采用的是动态代理,
在运行期间对业务方法进行增强,
所以不会生成新类,
对于动态代理技术,
Spring AOP提供了对
JDK动态代理的支持以及CGLib的支持。 JDK动态代理只能为接口创建动态代理实例,
而不能对类创建动态代理。
需要获得被目标类的接口信息(应用Java的反射技术),
生成一个实现了代理接口的动态代理类(字节码),
再通过反射机制获得动态代理类的构造函数,
利用构造函数生成动态代理类的实例对象,
在调用具体方法前调用invokeHandler方法来处理。 CGLib动态代理需要依赖asm包,
把被代理对象类的class文件加载进来,
修改其字节码生成子类。 但是Spring AOP基于注解配置的情况下,
需要依赖于AspectJ包的标准注解,
但是不需要额外的编译以及AspectJ的织入器,
而基于XML配置不需要。
143. 请描述JDK动态代理和CGLI代理的区别?
.JDK动态代理
此时代理对象和目标对象实现了相同的接口,
目标对象作为代理对象的一个属性,
具体接口实现中,
可以在调用目标对象相应方法前后
加上其他业务处理逻辑。 代理模式在实际使用时
需要指定具体的目标对象,
如果为每个类都添加一个代理类的话,
会导致类很多,
同时如果不知道具体类的话,
怎样实现代理模式呢?
这就引出动态代理。
JDK动态代理只能
针对实现了接口的类生成代理。 .CGLIB代理
CGLIB(CODE GENERLIZE LIBRARY)
代理是针对类实现代理,
主要是对指定的类生成一个子类,
覆盖其中的所有方法,
所以该类或方法不能声明称final的。 如果目标对象没有实现接口,
则默认会采用CGLIB代理; 如果目标对象实现了接口,
可以强制使用CGLIB实现代理
添加CGLIB库,
并在spring配置中加入
<aop:aspectj-autoproxy proxy-target-class="true"/>)
144.怎样用注解的方式配置Spring?
Spring在2.5版本以后
开始支持用注解的方式来配置依赖注入。
可以用注解的方式
来替代XML方式的bean描述,
可以将bean描述转移到组件类的内部,
只需要在相关类上、
方法上或者字段声明上使用注解即可。
注解注入将会被容器在XML注入之前被处理,
所以后者会覆盖掉前者
对于同一个属性的处理结果。
注解装配在Spring中是默认关闭的。
所以需要在Spring文件中
配置一下才能使用基于注解的装配模式。
如果你想要在你的应用程序中
使用关于注解的方法的话,
参考如下的配置。
<beans>
<context:annotation-config/>
</beans>
在 <context:annotation-config/>
标签配置完成以后,
就可以用注解的方式在Spring中向属性、
方法和构造方法中自动装配变量。 下面是几种比较重要的注解类型:
@Required:该注解应用于设值方法。 @Autowired:该注解应用于有值设值方法、
非设值方法、
构造方法和变量。
@Qualifier:该注解和@Autowired注解搭配使用,
用于消除特定bean自动装配的歧义。
JSR- Annotations:
Spring支持基于JSR-
注解的以下注解,
@Resource、
@PostConstruct
和 @PreDestroy。
145.如何在Spring中注入一个Java Collection?
• <list> :
该标签用来装配可重复的list值。
<!-- java.util.List -->
<property name="customList">
<list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>UK</value>
</list>
</property> • <set> :
该标签用来装配没有重复的set值。
<!-- java.util.Set -->
<property name="customSet">
<set>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>UK</value>
</set>
</property> • <map>:
该标签可用来注入键和值可以为任何类型的键值对。
<!-- java.util.Map -->
<property name="customMap">
<map>
<entry key="" value="INDIA"/>
<entry key="" value="Pakistan"/>
<entry key="" value="USA"/>
<entry key="" value="UK"/>
</map>
</property> • <props> :
该标签支持注入键和值都是字符串类型的键值对。
<!-- java.util.Properties -->
<property name="customProperies">
<props>
<prop key="admin">admin@nospam.com</prop>
<prop key="support">support@nospam.com</prop>
</props>
</property>
撩课-Java每天5道面试题第22天的更多相关文章
- 撩课-Java每天5道面试题第13天
撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...
- 撩课-Java每天5道面试题第15天
撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...
- 撩课-Java每天5道面试题第10天
撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...
- 撩课-Java每天5道面试题第9天
撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...
- 撩课-Java每天5道面试题第8天
撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...
- 撩课-Java每天10道面试题第7天
撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...
- 撩课-Java每天10道面试题第4天
撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...
- 撩课-Java每天5道面试题第17天
116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...
- 撩课-Java每天5道面试题第24天
151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...
随机推荐
- java.lang.IncompatibleClassChangeError:可以考虑是否是jar包冲突
一.背景:启动tomcat的时候,报错: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.cla ...
- [科普] 借助 everything 扩展教你屏蔽网址或转发网址
教你屏蔽网址或转发网址 万恶之源 为什么写这篇文章,俺觉得大家应该是有这个需(bai)求(du)的.只是不知道如何操作... 一.屏蔽网址 1.借助系统自带防火墙 (不推荐) Linux 下有 ipt ...
- JMeter PerfMon Metrics Collector性能监控插件
官方文档地址https://jmeter-plugins.org/wiki/PerfMon/ JMeter是一款压力测试工具,我们也可以用它来监控服务器资源使用情况. JMeter正常自带可以通过To ...
- QuantLib 金融计算——收益率曲线之构建曲线(2)
目录 QuantLib 金融计算--收益率曲线之构建曲线(2) YieldTermStructure 问题描述 Piecewise** 分段收益率曲线的原理 Piecewise** 对象的构造 Fit ...
- HihoCoder - 1445 后缀自动机 试水题
题意:求子串个数 SAM中每个子串包含于某一个状态中 对于不同的状态\(u,v\),\(sub(u)∩sub(v)=NULL\) 因此答案就是对于所有的状态\(st\),\(ans=\sum_{st} ...
- (四)Audio子系统之AudioRecord.read
在上一篇文章<(三)Audio子系统之AudioRecord.startRecording>中已经介绍了AudioRecord如何开始录制音频,接下来,继续分析AudioRecord方 ...
- [Xarmrin.IOS]使用Build Host 在Windows上建置IOS程式及DeBug (转帖)
使用Xamarin開發IOS程式時, 必須要在Mac上才可以編譯程式,若想在windows系統上編譯,則可透過Build host的方式, 但還是要有一台Mac的電腦就是了XD 首先你的Mac必須要已 ...
- java动态加载机制
假设有一个class,ClassLoader首先把它load到内存里的code segment(内存里存放代码段的),站在ClassLoader的角度,内存里的一个一个的class就是一个一个的对象, ...
- 2018最新win10 安装tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安装CUDA失败 导入tensorflow失败报错问题解决
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9747019.html 基本开发环境搭建 1. Microsoft Windows 版本 关于W ...
- js脚本语言在页面上不执行
转换原理:// 编码原理就是创建TextNode节点,附加到容器中,再取容器的innerHTML.(将脚本编码) // 解码原理是将字符串赋給容器的innerHTML,再取innerText或text ...