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天的更多相关文章

  1. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...

  2. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

  3. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  4. 撩课-Java每天5道面试题第9天

    撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...

  5. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  6. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  7. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  8. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  9. 撩课-Java每天5道面试题第24天

    151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...

随机推荐

  1. Problem D: GJJ的日常之暴富梦(水题)

    Contest - 河南省多校连萌(四) Problem D: GJJ的日常之暴富梦 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 693  Solve ...

  2. css3旋转动画

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 操作日期时间类 Calendar类

    使用Calendar类可以直接创建Calendar的子类GregorianCalendar  来直接实例化, GregorianCalendar calendar = new GregorianCal ...

  4. Jmeter使用吞吐量控制器实现不同的用户操纵不同的业务

    一.需求 需求:博客系统,模拟用户真实行为,80%的用户阅读文章,20%的用户创建文章,创建文章的用户随机的删除或者修改文章. 二.脚本实现 80%的用户查看文章 20%用户创建文章 根据post_i ...

  5. FutureTask与Fork/Join

    在学习多线程的过程中,我们形成了一种思维习惯.那就是对于某个耗时操作不再做同步操作,让他分裂成一个线程之后执行下一步,而线程执行耗时操作.并且我们希望在我们需要它返回的时候再去调用它的结果集.好比我们 ...

  6. 读取Properties文件的六种方法

    1.使用java.util.Properties类的load()方法 示例: InputStream in = new BufferedInputStream(new FileInputStream( ...

  7. jscover使用说明-总体说明

    1.总体说明 这个文档现在是完善和准确的,不管怎样,尽量去参考JSCoverage documentation. 1.1.介绍 JSCove是一个用来显示JavaScript项目代码覆盖率的工具,它是 ...

  8. python 对mongodb进行压力测试

    最近对mongoDB数据库进行性能分析,需要对数据库进行加压. 加压时,最初采用threading模块写了个多线程程序,测试的效果不理想. 单机读数据库每秒请求数只能达到1000次/s.而开发的jav ...

  9. Solr7.4的学习与使用

    学习的原因: 17年的时候有学习使用过lucene和solr,但是后来也遗忘了,最近公司有个项目需要使用到全文检索,正好也顺便跟着学习一下,使用的版本是Solr7.4的,下载地址:http://arc ...

  10. 论文笔记:CNN经典结构2(WideResNet,FractalNet,DenseNet,ResNeXt,DPN,SENet)

    前言 在论文笔记:CNN经典结构1中主要讲了2012-2015年的一些经典CNN结构.本文主要讲解2016-2017年的一些经典CNN结构. CIFAR和SVHN上,DenseNet-BC优于ResN ...