Spring的核心之IoC容器创建对象
Spring的Ioc容器,是Spring的核心内容:
作用:对象的创建和处理对象的依赖关系。
Spring容器创建对象有以下几种方式:
1:调用无参数的构造器
<!-- 默认无参的构造器 -->
<bean id="user1" class="com.bie.po.User"></bean>
2:调用有参数构造器
<!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
<bean id="user" class="com.bie.po.User">
<constructor-arg value="100" index="0" type="int"></constructor-arg>
<constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg>
</bean>
在Spring中通过配置文件使用ref元素引用其他JavaBean的实例对象
<!-- 定义一个字符串,值是'张三';String str=new String("张三"); -->
<bean id="str" class="java.lang.String">
<constructor-arg value="张三"></constructor-arg>
</bean>
<!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String-->
<bean id="user" class="com.bie.po.User">
<constructor-arg value="100" index="0" type="int"></constructor-arg>
<constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg>
</bean>
完整的applicationContext.xml(bean.xml)配置文件如下所示:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd"> 11 12 13 <!-- IoC容器的配置,要创建的所有的对象都配置在这里 --> 14 15 <!-- 默认无参的构造器 --> 16 <bean id="user1" class="com.bie.po.User"></bean> 17 18 <!-- 定义一个字符串,值是'张三';String str=new String("张三"); --> 19 <bean id="str" class="java.lang.String"> 20 <constructor-arg value="张三"></constructor-arg> 21 </bean> 22 23 <!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String--> 24 <bean id="user" class="com.bie.po.User"> 25 <constructor-arg value="100" index="0" type="int"></constructor-arg> 26 <!-- <constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg> 27 --> 28 <constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg> 29 30 </bean> 31 </beans>
3:工厂类创建对象
3.1:工厂类,静态方法创建对象
<!-- 3:工厂类创建对象
工厂类,实例方法,必须先创建工厂
再创建user对象,用factory的实例方法
-->
<bean id="factory" class="com.bie.po.ObjectFactory"></bean>
<bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>
3.2:工厂类,非静态方法创建对象
<!--
4:工厂类,静态方法,静态方法不需要实例化对象,
class指定的就是工厂类型
factory-method一定是工厂里面的静态方法
--><bean id="user" class="com.bie.po.ObjectFactory" factory-method="getStaticInstance"></bean>
完整的applicationContext.xml(bean.xml)配置文件如下所示:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd"> 11 12 13 <!-- IoC容器的配置,要创建的所有的对象都配置在这里 --> 14 15 <!-- 默认无参的构造器 --> 16 <bean id="user1" class="com.bie.po.User"></bean> 17 18 <!-- 定义一个字符串,值是'张三';String str=new String("张三"); --> 19 <bean id="str" class="java.lang.String"> 20 <constructor-arg value="张三"></constructor-arg> 21 </bean> 22 23 <!-- 带参的构造器 ,基本数据类型直接写如int,引用数据类型写全名如java.lang.String--> 24 <bean id="user2" class="com.bie.po.User"> 25 <constructor-arg value="100" index="0" type="int"></constructor-arg> 26 <!-- <constructor-arg value="张三" index="1" type="java.lang.String"></constructor-arg> 27 --> 28 <constructor-arg ref="str" index="1" type="java.lang.String"></constructor-arg> 29 </bean> 30 31 <!-- 3:工厂类创建对象 32 工厂类,实例方法,必须先创建工厂 33 再创建user对象,用factory的实例方法 34 --> 35 <bean id="factory" class="com.bie.po.ObjectFactory"></bean> 36 <bean id="user3" factory-bean="factory" factory-method="getInstance"></bean> 37 38 <!-- 4:工厂类,静态方法,静态方法不需要实例化对象,所以直接引用工厂类的class和方法 --> 39 <bean id="user" class="com.bie.po.ObjectFactory" factory-method="getStaticInstance"></bean> 40 </beans>
掌握Spring核心IoC容器,由简到繁,faghting~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?