撩课-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基本数据类型所占字节数是多少?
byte 1字节 short 2字节 int 4字节 long 8字节 ...
- SpringMvc+ajax 实现json格式数据传递
传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...
- Chrome 中删除单条浏览记录
悲伤...之前用非隐私窗口观看了小电影.于是打开 chrome://settings/ ...... 现在才知道 windows 上使用 shift + del 即可删除该浏览记录 ....... 以 ...
- iOS --高仿QQ空间页面
1.首先分析一下qq空间页面的主要2个功能: 1)随着TableView的向上滑动导航栏的颜色渐变,变化过程是从透明变成白色. 2)随着TableView的向下滑动,图片随着offset放大. 2.首 ...
- 在eclipse中,用maven创建web项目
备注:该文档是之前学习时,根据网上其他童鞋的经验自己测试后梳理,如有侵权,请勿怪,感谢! 1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击ne ...
- leetcode-292-Nim Game(搬石子)
题目描述: You are playing the following Nim Game with your friend: There is a heap of stones on the tabl ...
- Java多线程——不变性与安全发布
1.不变性 某个对象在被创建后其状态就不能被修改,那么这个对象就称为不可变对象,不可变对象一定是线程安全的.不可变对象很简单.他们只有一种状态,并且该状态由构造函数来控制. 当满足以下条件时,对象才是 ...
- FlowPortal-BPM——移动手机端配置与IIS发布
一.移动手机端配置 (1)VS打开文件夹iAnyWhere,配置config文件 (2)BPM-Web文件config中设置(设置为外网网址) 二.BPM设置 勾选移动审批可以设置要展示的字段信息,修 ...
- 函数直接写在html页面的<script>里可以调用,但是单独放在js文件里不能调用
1.函数直接写在页面相当于是你本页调用,所以理所应当可以调用 2.js单独文件不能调用是因为你没有引用js文件,如果引用了的话,也是可以调用的. 引用方式,你可以直接拖拽(我一般都是拖拽,因为路径准确 ...
- Ubuntu18.04配制阿里巴巴的源
配制阿里巴巴的源步骤 使用阿里巴巴的开源镜像:https://opsx.alibaba.com/mirror 然后选择ubuntu的帮助选项,复制ubuntu18.04镜像源 设置root账户密码: ...