Spring学习之——依赖关系和配置细节(三)

Spring的继承和依赖关系 Spring的继承和依赖关系Spring的继承1. 概念:2. 操作:3. 覆盖:4. 不同类之间的继承:Spring的依赖 Spring的继承 1. 概念: Spring 的继承与 Java 的继承不一样,但思想很相似,子 bean 可以继承父 bean 中的属性。 Spring 的继承是在对象层面进行操作的,即两个 bean 来自同一个类,因此方法是不存在继承关系的。(方法是一样的) 2. 操作: 使用bean的parent属性 <bean id="user" class="..."> 阅读详情

今天学习的内容主要是,depends-on属性的使用,延迟加载lazy-init
通过前面的学习我们知道当我们在引用一个对象时使用ref属性,有时候一个bean的实例需要依赖另外的bean先实例,这种情况又该怎么配置呢,这就是我们今天要学习的第一个属性depends-on
下面我们还是通过一个小程序来描述一下它的主要功能
定义ManagerBean.java,为了演示效果这里将其默认的构造函数显示给出

public class ManagerBean {

	private String name;

	// 为了演示效果将默认构造显式给出
	public ManagerBean(){
		System.out.println("ManagerBean constructor");
	}
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

定义ExampleBean.java

public class ExampleBean {
	private ManagerBean manager;
	private String name;
	
	public ExampleBean(){
		System.out.println("Example constructor");
	}
	
	public ManagerBean getManager() {
		return manager;
	}
	public void setManager(ManagerBean manager) {
		this.manager = manager;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


配置文件bean.xml

<bean id="ExampleBean" class="cn.com.spring.injection.bean.ExampleBean" depends-on="ManagerBean">
		<property name="manager"><ref bean="ManagerBean"/></property>
		<property name="name" value="ExampleBean"/>
	</bean>
	<bean id="ManagerBean" class="cn.com.spring.injection.bean.ManagerBean">
		<property name="name" value="ManagerBean" />
	</bean>


测试程序

public class TestUtils extends TestCase {
	private ApplicationContext actx = new FileSystemXmlApplicationContext("bean.xml");
	
	@Test
	public void test1(){
		
		ExampleBean exbean = (ExampleBean)actx.getBean("ExampleBean");
		
		System.out.println(exbean.getName());
		System.out.println(exbean.getManager().getName());
		
	}
}


执行结果
ManagerBean constructor
Example constructor
ExampleBean
ManagerBean
通过分析结果可知ManagerBean先于ExampleBean构造,去掉depends-on属性后
再次执行的结果
Example constructor
ManagerBean constructor
ExampleBean
ManagerBean
有时候依赖的bean不只是一个,这时候depends-on的配置形式如:depends-on="manager,accountDao"将多个bean有逗号隔开

接下来我们来学习bean的延迟加载,ApplicationContext默认的情况下在启动时会将所有singleton(bean的默认配置) bean都实例化,也就是说提前实例化是初始化的一部分,这样的好处就是如果有配置问题就会在初始化的时候暴露出来,但是有些情况下我们并不希望在初始化的时候实例那么多的bean,我们希望在使用它的时候即调用getBean的时候才对bean进行实例,这时我们可以对该bean进行延迟加载配置。下面我们还是通过一个小例子来演示这个属性的使用
我们将上面的程序保持不变再添加一个LazyBean.java类

public class LazyBean {
	
	private String name;
	public LazyBean(){
		System.out.println("LazyBean constructor");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

配置文件添加

<bean id="LazyBean" class="cn.com.spring.injection.bean.LazyBean" lazy-init="true">
		<property name="name" value="LazyBean"/>
</bean>

测试程序

@Test
	public void test1(){
		
		ExampleBean exbean = (ExampleBean)actx.getBean("ExampleBean");
		
		System.out.println(exbean.getName());
		System.out.println(exbean.getManager().getName());
		
		LazyBean lbean = (LazyBean)actx.getBean("LazyBean");
		System.out.println(lbean.getName());
		
	}


运行结果如下
ManagerBean constructor
Example constructor
ExampleBean
ManagerBean
LazyBean constructor
LazyBean
结果与预期的一致
这里大家有没有一些疑问呢,如果将lazy-init属性应用于第一个例子中,那么depends-on和lazy-init这两个属性会不会冲突呢,那个又会起作用呢
这个配置情况有多种,笔者只测试了将lazy-init应用于ManagerBean配置中,发现根本不起作用。我们说这个属性只是对singleton bean起作用,那么如果是scope="prototype"或singleton="false"又怎么样呢,大家可以将bean的配置加上scope="prototype" lazy-init="false"试试


 

Spring学习笔记(三)基于XML Schema的配置方式 前言:Spring2.0开始,Spring允许使用基于XML Schema的配置方式来简化Spring配置文件,这种方式更加简洁,可以对Spring配置文件进行“减肥”。   Spring配置文件的基本配置的&lt;beans&gt;标签包含如下配置: &lt;?xml version="1.0" encoding="GBK"?&gt; &lt;beans xmlns:xsi="http://... 阅读详情

相关推荐

Spring IOC学习心得之注册bean的依赖关系

1. 几种map缓存的意义 private final Map> dependentBeanMap = new ConcurrentHashMap>(); //指定的bean与依赖这个指定的bean的所有bean的依赖关系的缓存 private final Map> dependenciesForBeanMap = new ConcurrentHashMap>(); //指定bea

u011734144的专栏 2692

Spring学习之——依赖关系和配置细节(一)

这一次的学习主要是对配置的一些特殊属性进行了解和使用。 首先我们要了解的第一个属性就是idref,在前面的学习中我们已经接触到ref这个属性,那么idref和ref这两个属性有什么区别呢,事实上它们两个虽然长得很相似但是却不怎么相干,ref这个属性我们通过前面的学习已经知道,它的作用就是用来引用一个bean的实例用来实现依赖注入的功能,而idref则是用来引用bean的名字的注意是名字而不是实例

private_class的专栏 1163

开源PACS系统Orthanc(DICOM服务器)配置

PACS(Picture Archiving and Communication System)是医学影像的数字化存储、检索和传输系统,用于管理和存储医学图像和相关信息,如放射学、核医学、超声、病理学等各种医学影像。PACS系统通过数字化技术取代了传统的胶片方式,使医疗机构能够更高效地存储、传输和查看医学图像,从而提高了医疗图像的管理和工作流程。

qq_42231043的博客 6250

配置依赖关系全面解析

配置依赖关系全面解析 DI分成: –设置注入:&lt;property&gt; –构造器注入:&lt;constructor-arg&gt; –接口注入 无论哪个注入,都涉及到传入参数值 参数值: –标量类型:(8个基本类型+string) 用value属性或value子元素传入值 &lt;bean id="dog" class="org.fkjava.spring.service.impl...

weixin_38626208的博客 352

手把手教你用RMII接口配置以太网PHY芯片(附YT8512实战代码)

本文详细介绍了如何使用RMII接口配置以太网PHY芯片,以国产YT8512为例,提供从硬件设计到软件驱动的全流程实战指南。内容包括RMII接口技术解析、YT8512硬件设计要点、驱动开发实战代码及常见问题排查,帮助开发者快速实现以太网通信功能。

mac99的博客 996

ArcGIS遥感影像分类技术在植被覆盖度计算中的应用

本文详细介绍了如何利用ArcGIS遥感影像分类技术高效计算植被覆盖度。通过数据准备、监督与非监督分类方法详解,并结合制表分析与栅格计算器进行面积统计,最终实现从分类图到覆盖度百分比的全流程自动化与可视化,为生态评估与规划提供精准数据支持。

weixin_29091445的博客 421

Spring boot条件化注解

@Conditional(实现了Condition接口的类) 满足某个自定义条件时才创建有该注解的Bean@ConditionalOnBean 配置了某个特定Bean@ConditionalOnMissingBean 没有配置特定的Bean 例如: @Bean @ConditionalOnMissingBean(Bean_B.class)  public Bean_A getBean...

qq_35487744的博客 393

字节系,ali系,ks,pdd最新抓包方案

各大厂安卓逆向

qq_38759383的博客 1145

Spring学习之——依赖关系和配置细节(四)

这一章我们来学习依赖关系的一点补充内容,公共属性的注入,自定义属性编辑器 我们现在来设想一种情况如果有多个bean的有相同的属性,我们每个bean都要做一次配置有时候是很麻烦呢,有没有针对公共属性进行注入的配置方法呢 下面我们通过一个小程序演示如何来对对公共属性的注入 我们这里定义两个Bean类分别为ExampleBean1.java和ExampleBean2.java,它们有两个公共属性n

private_class的专栏 830

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

Unity-TextMeshPro如何扩展材质实现字体Face+Outline流光效果

前言 TexeMeshPro 是Unity的一个Text文本插件,实现了比UGUI的Text,更好看的效果,跟高效的性能,所以深受大家的喜欢,但是再好的插件,也不是万能的,比如我们的策划有个新需求,要我们的VIP的名字比普通玩家有更好看的效果,例如:字体流光,外发光颜色扰动,字体贴图等等。那我们就需要去扩展TextMeshPRo的shader功能了。如下图所示 本文,我就带大家一起来扩展一下:如何扩展TextMeshProUGUI TextMesh原始面板 扩展功能后的面板 扩展TextMeshPro

TxNet 9676

Spring学习(二十)Bean 的依赖关系介绍

在Spring容器中,两个Bean之间 除了注入关系外,还存在 继承、依赖、引用 三种关系: 继承关系:在Spring容器当中允许使用abstract标签来定义一个父bean,parent标签来定义一个子bean。子bean将自动继承父bean的配置信息。依赖关系:Spring允许用户通过depends-on标签来设定bean的前置依赖bean,前置依赖的bean会在本bean实例化之前就

wangxin1248的博客 6303

OpenStack详解、排错、经验总结

第1章 Openstack简介 1.1 计算(Compute):Nova。 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。 1.2 对象存储(Object Storage):Swift。 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供

weixin_40548182的博客 1974

Spring依赖关系的配置

一. Spring依赖关系的配置UML类图中类之间的关系     UML类图中的关系包含:依赖关系、泛化关系、关联关系、聚合关系、组合关系、实现关系1. 依赖关系    一种使用的关系,A类的变化引起了B类的变化,就说明B依赖于A。依赖关系有如下3种情况:      1. A类是B类(方法中)的局部变量      2. A类是B类方法中的参数      3. A类向B类传递消息 2. 泛化关系

kiikgu的专栏 866

1553B总线介绍及其硬件方案设计

军用1553B总线 1.简介 简单介绍可参考(https://blog.youkuaiyun.com/ScilogyHunter/article/details/108444231)博主写的很详细。 1553B总线是MIL-STD-1553总线的简称,其中B就是BUS,MIL-STD-1553B总线是飞机内部时分制命令/响应式多路复用数据总线。1553B数据总线标准是20世纪70年代由美国公布的一种串行多路数据总线标准。1553B总线能挂31个远置终端,1553B总线采用指令/响应型通信协议,它有三种终端类型: BC:

小幽余生不加糖 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

晋南讲堂之Spring—(六)bean配置上的继承和依赖关系

  承接上一篇文章,在src目录下新建一个

衣人之衣者,怀人之忧;食人之食者,死人之事! 2403

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

@DependsOn:解析 Spring 中的依赖关系之艺术

本文将深入研究 Spring 框架中的 `@DependsOn` 注解,揭示其在解决 Bean 依赖关系中的独特作用。通过了解 `@DependsOn` 的使用场景和原理,你将能够更好地掌握 Spring 中 Bean 的初始化顺序,从而优化应用的性能和稳定性。

todoitbo的博客 3932

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

spring属性配置细节

1 2

qq_44772414的博客 2万+

Spring的MessageSource配置细节

Spring的MessageSource有两个常用的实现ReloadableResourceBundleMessageSource和ResourceBundleMessageSource。这两个类在配置上有些区别。   我原来常用ResourceBundleMessageSo

走走停停,停停走走…… 4792

Spring bean配置细节

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springfra...

weixin_39996256的博客 122

关于spring框架体系的pom依赖关系

很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些spring的依赖,只有拷贝,其实,当初我就是这么干的! spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar,所以...

weixin_43222373的博客 1775

Spring整体架构和jar包依赖关系详解

想对spring框架进行深入的学习一下,看看源代码,先了解下Spring的整体架构以及各模块之间的关系。 在介绍整体架构之前,我们先来聊聊大家关于Spring,熟悉的模块有哪些,还有哪些不熟悉的模块。 作为优秀的开源项目,spring包括众多的子项目。     Spring Web Flow:构建在spring MVC的基础上(spring MVC大家应该都很熟悉吧),定义了

谈歌-0311的博客 2226

Spring学习之路:环境搭建、核心API与配置文件细节

1.JDK 1.8+官方网站 www.spring.io。

qq_44766305的博客 1116

Spring学习之——依赖关系和配置细节(二)

上面一章我们学习了bean配置中idref和ref两个属性的使用方法,下面我们来学习对一些集合类型的注入配置主要是List,Set,Map和Properties文件。 下面我们还是通过一个例子来演示集合注入。 首先新建一个类 CollectionInjection.java import java.util.List; import java.util.Map; import java.u

private_class的专栏 867

Spring框架中@Lazy延迟加载原理和使用细节

目录 一、@Lazy延迟加载原理 1.延迟加载原理 1.1 @Lazy三种配置方法 1.2 @ComponentScan配置延迟加载 1.3 加载原理 2.延迟加载实现原理 2.1 AbstractApplicationContext 2.2 DefaultListableBeanFactory 二、使用细节 1.@Lazy失效实例 1.1 Controller非延迟加载类 1.2 Service延迟加载类 1.3 结果输出 2.@Lazy起效实例 2.1 修改的Control

Armyyyyy丶的博客 2万+

Spring学习——程序间的依赖关系解决

程序间的依赖关系。 在开发过程中一个项目是需要许多人共同完成的,类与类之间存在依赖关系,如果不解决依赖关系,A的类没有写完,B完全不能工作需要等待A写完才能写,要解决这个问题就需要使用反射功能解决,减少使用new XXX的使用创建实例,确保在写代码的时候编译过程中不报错。   开发时遵循的原则: 编译时不依赖,运行时才依赖。 解决依赖关系: 使用反射创建类对象。   使用反射创建类...

qq_38125626的博客 691
上一篇: Spring学习之——依赖关系和配置细节(二)
下一篇: Spring学习之——依赖关系和配置细节(四)
private_class
博客等级 码龄14年 2粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值