热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Spring面试

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Spring面试相关的知识,希望对你有一定的参考价值。1.说说你对Spring的IOC机制的理解可以吗?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Spring面试相关的知识,希望对你有一定的参考价值。



1.说说你对Spring的IOC机制的理解可以吗?

Spring IOC框架,控制反转,依赖注入

以前是xml文件来进行一个配置,后面进化到了基于注解来进行自动依赖注入

Spring ioc,spring 容器,根据xml配置,或者是你的注解,去实例化你的一些bean对象,然后根据xml配置或者注解,去对bean对象之间的应用关系,去进行依赖注入,某个bean依赖了另外一个bean

底层的核心技术,反射,它会通过反射的技术,直接根据你的类去自己构建对应的对象出来,用的就是反射的技术

ps:自由发挥


2.说说你对Spring的AOP机制的理解可以吗?

比如说我们平时有两个类,MyserviceA和MyserviceB,在类里面有他自己的方法,doServiceA和doServiceB,在方法里面我们会进行增删改查的操作,一般进行这种操作我们都会考虑到事务,所以我们会加入开启事务,回滚事务,提交事务,关闭事务的代码。通过AOP,我们做一个切面,比如MyserviceXXXX的这种类,在这些类的所有方法中,都去织入一些代码,在所有这些方法刚开始运行的时候,都会先去开启一个事务,在所有这些方法运行完毕后,去根据是否抛出异常来判断事务的具体操作

AOP的核心技术就是动态代理

ps:看下手写代理模式的代码。


3.了解过cglib动态代理吗?他跟jdk动态代理的区别是什么?

优先jdk动态代理,其次是cglib动态代理

动态代理其实就是动态的创建一个代理类出来,创建这个代理类的实例对象,在这个里面引用你真正自己写的类,所有的方法的调用,都是先走代理类的对象,它负责做一些代码上的增强,再去调用你自己写的那个类

如果你的类是实现了某个接口的,spring aop 会使用jdk动态代理,生成一个跟你实现同样接口的一个代理类,构造一个实例对象出来,jdk动态代理,它其实是在你的类有接口的时候,就会来使用

很多时候我们可能某个类是没有实现接口的,spring aop会改用cglib来生成动态代理,他是生成你的类的一个子类,它可以动态生成字节码,覆盖你的一些方法,在方法里加入增强的代码


public class CglibMeipo implements MethodInterceptor {
public Object getInstance(Class clazz) throws Exception {
Enhancer enhancer
= new Enhancer();
//要把clazz设置为即将生成的新类父类
enhancer.setSuperclass(clazz);
enhancer.setCallback(
this);
return enhancer.create();
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println(
"我是媒婆:我要给你找对象,已经拿到你的需求");
System.out.println(
"开始物色");
methodProxy.invokeSuper(o,objects);
System.out.println(
"如果合适的话,准备办事");
return null;
}
}


public class JdkMeipo implements InvocationHandler {
//把被代理的对象保存下来
private Person target;
public Object getInstance(Person target) throws Exception{
this.target = target;
// Class clazz = Class.forName(this.target.getClass().getName());
Class clazz = target.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(),clazz.getInterfaces(),this);
//loader:Proxy.newProxyInstance的三个参数分别代表什么
//interfaces:用哪个类加载器去加载类对象
//h:动态代理方法执行时,会调用h里面的invoke方法去执行
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(
"我是媒婆:我要给你找对象,现在已经拿到你的需求");
System.out.println(
"开始物色");
method.invoke(
this.target,args);
System.out.println(
"如果合适的话,就准备办事");
return null;
}
}


4.能说说Spring中的Bean是线程安全的吗?

spring容器中的bean可以分为5个范围:

(1)singleton:默认,每个容器中只有一个bean的实例

(2)prototype:为每一个bean请求提供一个实例

一般来说下面三种作用域一般不会用

(3)request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收

(4)session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效

(5)global-session

那么是不是线程安全的了?答案是否定的,比如说在某个类有个int data = 0变量,类里面有个方法进行data++操作,当多个线程去请求bean就会发生线程不安全,怎么解决,就是不要去访问内存中的共享数据,而是去访问数据库。


5.Spring的事务实现原理是什么?能聊一聊你对事务传播机制的理解吗?

 


推荐阅读
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文详细介绍了 Java 中 org.w3c.dom.Node 类的 isEqualNode() 方法的功能、参数及返回值,并通过多个实际代码示例来展示其具体应用。此方法用于检测两个节点是否相等,而不仅仅是判断它们是否为同一个对象。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 如何处理PHP缺少扩展的问题
    本文将详细介绍如何解决PHP环境中缺少扩展的问题,包括检查当前环境、修改配置文件以及验证修改是否生效的具体步骤,帮助开发者更好地管理和使用PHP扩展。 ... [详细]
  • 使用Echarts for Weixin 小程序实现中国地图及区域点击事件
    本文介绍了如何使用Echarts for Weixin在微信小程序中构建中国地图,并实现区域点击事件。包括效果展示、条件准备和逻辑实现的具体步骤。 ... [详细]
  • 本文将探讨如何在 Struts2 中使用 ActionContext 和 ServletActionContext 来获取请求参数和会话信息,同时解释它们的内部机制和最佳实践。 ... [详细]
author-avatar
北京超凡传媒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有