- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章面试JAVA时,问到spring该怎么回答由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
IOC,就是我们经常所说的控制反转,DI,就是依赖注入,这两个是对同一个事物从不同角度的解释。没有使用spring框架的时候,我们需要使用一个对象,经常需要自己去手动new,需要自己取管理对象。使用spring的IOC容器之后,对象交给spring的IOC容器管理,bean的创建,初始化,结束,依赖注入等一系列,全部由IOC容器帮我们完成,我们在需要使用的时候,直接调用就行了.
通过 Ordered 和 PriorityOrdered 接口进行排序。PriorityOrdered 接口的优先级比 Ordered 更高,如果同时实现 PriorityOrdered 或 Ordered 接口,则再按 order 值排序,值越小的优先级越高.
结论: Bean是线程不安全的 。
Spring容器中的Bean是否线程安全,容器本身并没有提供对Bean的线程安全策略,因此可以说Spring的Bean本身不具备线程安全的特性.
如果Bean是无状态的,那么Bean则是线程安全的 。
如果Bean是有状态的,那么Bean就不是线程安全的 。
另外,Bean是不是线程安全,跟Bean的作用域没有关系,Bean的作用域只是表示Bean的生命周期范围,对于任何生命周期Bean都是一个对象,这个对象是不是线程安全的,还是得看Bean里的这个对象本身 。
1.Bean容器找到配置文件中Spring Bean的定义.
2.Bean容器利用Java Reflection API创建一个Bean的实例.
3.如果涉及到一些属性值,利用set()方法设置一些属性值.
4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字.
5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例.
6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例.
7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法.
8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法.
9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法.
10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法.
11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法.
12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法.
13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法.
1.工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例; 。
2.单例模式:Bean默认为单例模式.
3.代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术; 。
4.模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。观 。
5.察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener.
@Autowired可用于:构造函数、成员变量、Setter方法 。
@Autowired和@Resource之间的区别 。
Spring支持两种类型的事务管理:
编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护.
声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务.
大多数Spring框架的用户选择声明式事务管理,因为它对应用代码的影响最小,因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许你通过代码控制事务)少了一点灵活性。唯一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别.
在TransactionDefinition接口中定义了八个表示事务传播行为的常量.
支持当前事务的情况:
PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务.
PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行.
PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性).
不支持当前事务的情况:
PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起.
PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起.
PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常.
其他情况:
PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED.
在AOP术语中,切面的工作被称为通知,实际上是程序执行时要通过SpringAOP框架触发的代码段.
Spring切面可以应用5种类型的通知:
1.前置通知(Before):在目标方法被调用之前调用通知功能; 。
2.后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么; 。
3.返回通知(After-returning ):在目标方法成功执行之后调用通知; 。
4.异常通知(After-throwing):在目标方法抛出异常后调用通知; 。
5.环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为.
本片文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我的更多内容! 。
原文链接:https://blog.csdn.net/qsy190557020/article/details/119985929 。
最后此篇关于面试JAVA时,问到spring该怎么回答的文章就讲到这里了,如果你想了解更多关于面试JAVA时,问到spring该怎么回答的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有这个gradle命令行,可以完美地工作: /gradle app:testalldevicesproductionenv -Pandroid.testInstrumentationRunnerAr
因此,我使用 NativeBase 作为组件框架来开发 React Native 应用程序。 我正在使用卡片组件。 这是我的代码: render(){ return(
假设我有这样的Kotlin代码: val var1:String? = isVar1Present() val var2:String? = isVar2Present() val var3:Stri
我想要一些有关当前正在使用的程序的指导,如果用户两次输入相同的值,我已经成功创建了一对整数并处理了异常。我一直坚持执行创建对的相同过程,但不是整数,它必须是字符串。 我的一个建议是更改有序对的随机生成
我的 node.js e2e 测试有问题。我想等待 2 个 promise 解决。但由于某种原因,当我使用 Q.all 时,它只是卡住了我的应用程序。我正在使用 kriskowal 的 Q 1.0.0
实际上我已经开发了使用 Hdfs 存储图像的应用程序。现在我想迁移服务器并在新服务器中再次设置 hadoop。我如何将 HDFS(旧服务器)中的图像文件备份到新服务器中的 HDFS? 我尝试使用 Co
我想在GCP上建立一个完全自动化的CI / CD管道。在Cloud Build中,我已经有了一个cloudbuild.yaml,它可以构建Dockerfile并将构建的Docker镜像推送到Conta
我刚刚开始使用Docker,并能够使用Ubuntu 14.03 / LXDE / VNC设置Docker镜像,由于我可以从外部连接到VNC服务器,因此可以很好地工作。 现在,我试图理解Docker的网
我有 Talend Studio Data Intergration 6.2.1。作业导出为 .war,作为 Web 服务在服务器上执行。 我的问题是,有什么方法可以找出哪个应用程序调用我的 ws?
这个问题在这里已经有了答案: Why is super.super.method(); not allowed in Java? (22 个答案) 关闭 9 年前。 我怀疑我想做的事情是否可行。我有
我似乎无法找到正确的方式来表达这一点以进行 Google 搜索。 当我使用 q.all 并且只有一两个失败时(在 Node.js 中)会发生什么。我需要为我使用 Promise 的所有成功实例输入 .
Closed. This question needs to be more focused. It is not currently accepting answers. Learn more。 想
我已经整理了一个宏,它允许我将数据从一张表存档到另一张表,但是我无法让它在之后清除信息。第一列包含我不想清除的数字,现在它只是清除 B 列中的数据。 如果有人可以看看这个,我会非常感激。 'Sub a
我有一个 C# 程序可以从 .txt 文件创建 Excel 文件报告。 它工作完美,但有时(经常)当我打开一个电子表格时,Excel 会打开 2 个电子表格: 1 我保存的文件。1 有一些名为“Pla
为什么不玩 onclick="catch()"?我不明白。 function catch () { alert("safsf"); } ... 最佳答案 catch 是
在 Q 中,有哪些方法可以在 where 子句中使用嵌套查询的结果? 我正在寻找类似于 SQL 语句的内容。 select from food where type_id in ( selec
虽然这段代码可以工作: var promise = function(val) { var _val = val; return setTimeout(function(_val) {
自Mozilla和Google宣布,他们打算将来使用默认设置通过HTTPS激活DNS,并且IETF正式批准了该草案(https://datatracker.ietf.org/wg/doh/about/
OnClickListener 无法与 ScrollView 一起使用,因为“扩展了 Fragment”。我该如何使用它呢?一个例子就足够了。谢谢.. 更新Fragment1.java package
char name[20]=""; char address [50]= ""; do{ printf("Input your name [1..20] : "); scanf("%s
我是一名优秀的程序员,十分优秀!