spring学习笔记(持续更新)

1. spring替我们创建的bean,它放在哪里了?

通常而言,我们一般会用到两种bean:singleton和prototype。对于singleton的bean,一旦创建过后,spring会把它存到一个map里面。

DefaultSingletonBeanRegistry类

/** Cache of singleton objects: bean name --> bean instance */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);

而prototype属性的bean,则是每次获取都会去创建。

2. 类中用Autowired注解修饰的属性,是在什么时候注入值的?

下面的图显示了注入属性的调用栈。

3. spring具体是如何解决循环依赖的?(先看简单情形singleton)

@Component
@Lazy
public class ClassA {
    @Autowired
    private ClassB companion;
}
@Component
@Lazy
public class ClassB {
    @Autowired
    private ClassA companion;
}

appCtx.getBean("classA"); // 触发创建bean

spring的debug日志如下(主要就是提前暴露):

Creating shared instance of singleton bean ‘classA‘
Creating instance of bean ‘classA‘
Registered injected element on class [com.zhang.bean.ClassA]: AutowiredFieldElement for private com.zhang.bean.ClassB com.zhang.bean.ClassA.companion
Eagerly caching bean ‘classA‘ to allow for resolving potential circular references
Processing injected element of bean ‘classA‘: AutowiredFieldElement for private com.zhang.bean.ClassB com.zhang.bean.ClassA.companion
Creating shared instance of singleton bean ‘classB‘
Creating instance of bean ‘classB‘
Registered injected element on class [com.zhang.bean.ClassB]: AutowiredFieldElement for private com.zhang.bean.ClassA com.zhang.bean.ClassB.companion
Eagerly caching bean ‘classB‘ to allow for resolving potential circular references
Processing injected element of bean ‘classB‘: AutowiredFieldElement for private com.zhang.bean.ClassA com.zhang.bean.ClassB.companion
Returning eagerly cached instance of singleton bean ‘classA‘ that is not fully initialized yet - a consequence of a circular reference
Autowiring by type from bean name ‘classB‘ to bean named ‘classA‘
postProcessBeforeInitialization classB
Finished creating instance of bean ‘classB‘
Autowiring by type from bean name ‘classA‘ to bean named ‘classB‘
postProcessBeforeInitialization classA
Finished creating instance of bean ‘classA‘

时间: 2024-11-10 00:07:04

spring学习笔记(持续更新)的相关文章

Git学习笔记(持续更新)

强制同步为远程的代码 远程仓库回退了commit的情况下(第2条描述之情况),强制同步远程的代码到本地 #更新远程最新的所有代码,但是不merge或者rebase git fetch --all #直接reset到master,也就把刚才fetch的更新了 git reset --hard origin/master 回退版本 #回退本地版本git reset --hard <commit_id>#强制提交到服务器 git push origin HEAD --force 新建分支和远程分支

Semantic ui 学习笔记 持续更新

这个semantic 更新版本好快~ 首先是代码的标识<code></code> 具体样式就是红框这样的 圈起来代码感觉不错 不过要在semantic.css里在加上如下样式~ code { background-color: rgba(0, 0, 0, 0.02); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1); display: inline-block; font-family: "Monaco","Menlo

oracle学习笔记 持续更新

1.创建表空间DATA_BASIC (1)Orale用户登录系统 (2)sqlplus / as sysdba; DBA用户登录数据库: 执行:create tablespace TAB_STS_BASIC datafile     '/oracle/app/uboss/oradata/UBOSS/datafile/uboss_def01.dbf' size 512M; --路径要根据实际情况修改: select * from dba_data_files可以查到数据文件存放路径 2.创建数据库

ggplot2 学习笔记 (持续更新.....)

1. 目前有四种主题 theme_gray(), theme_bw() , theme_minimal(),theme_classic() 2. X轴设置刻度 scale_x_continuous(limits=c(1950,2000),breaks=seq(1950,2000,5)) 3. Bar & Line ggplot2()+geom_bar(aes(y=x,fill=factor(Group.2)),stat="identity",position='dodge')+

图像处理 基于Visual C++编程 学习笔记 持续更新中。。。

2015-4-26 新建一个工程,安装MSDN文档 File -new - win32application- a simple win32 app Dos操作系统是 16位操作系统 2^16=65535 ,内存为16k win32操作系统(window95以后的系统) 32位 2^32 内存约为4G 进入后可以试着编译运行这样一段话 tip:选中MessageBox 按F1可以看到MSDN的相关文档, 选中MB_OK 按F12可以看到它的宏定义 int MessageBox( HWND hWn

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

<Spring学习笔记>:Spring.Hibernate.struts2的整合(以例子来慢慢讲解,篇幅较长) 最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring.Hibernate.struts2整合这里,由于是以例子的形式来对Spring+Hibernate+struts2这3大框架进行整合,因此,自己还跟着写代码的过程中,发现还是遇到了很多问题,因此,就记录下. 特此说明:本篇博文完全参考于马士兵老师的<Spring视频教程>. 本篇博文均以如下这

Spring学习笔记(一)

Spring学习笔记(一) Spring核心思想: IOC:  Inversion Of Control (控制反转) / DI: Dependency Injection (依赖注入) AOP: Aspect Oriented Programming (面向切面编程) IOC 1. 简单的应用 Model package com.wangj.spring.model; public class User { private String username; private String pas

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;  

linux学习资料持续更新中

一.LINUX基础教程 1.老男孩系列免费视频: 1) linux高薪入门实战视频教程(第二部)老男孩linux教程 http://edu.51cto.com/course/course_id-1035-page-1.html 2) 跟着老男孩从0开始一步步实战深入学习linux运维(三) http://edu.51cto.com/lesson/id-11909.html linux学习资料持续更新中,布布扣,bubuko.com

Linux学习笔记——Ubuntu更新软件源

0.前言 通过修改ubuntu软件源可提高apt命令下载安装软件的速度. 参考资料 [官方资料]--配置文件修改方法 [Ubuntu怎样修改软件源地址]--使用ubuntu软件中心修改(推荐) [at-get update错误处理] 1.使用ubuntu软件中心更新 请参考[Ubuntu怎样修改软件源地址]--来自百度经验 图1 打开软件和更新 图2 选择国内软件源 2.使用指令方法修改 [1]首先备份源列表 sudo cp /etc/apt/sources.list /etc/apt/sour