热门标签 | 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的事务实现原理是什么?能聊一聊你对事务传播机制的理解吗?

 


推荐阅读
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 我有一个SpringRestController,它处理API调用的版本1。继承在SpringRestControllerpackagerest.v1;RestCon ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
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社区 版权所有