Spring的核心之IoC容器创建对象

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Spring的Ioc容器,是Spring的核心内容:   作用:对象的创建和处理对象的依赖关系。 Spring容器创建对象有以下几种方式:   1:调用无参数的构造器       2:调用有参数构造器                     ...

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~~~

目录
相关文章
|
22小时前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
5天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
27 6
|
20天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
41 2
|
20天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
30 1
|
1月前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
1月前
|
Java Maven Spring
Spring 小案例体验创建对象的快感
本文介绍了如何在IDEA中创建一个Spring项目,包括项目创建、配置pom.xml文件以引入必要的依赖、编写实体类HelloSpring及其配置文件applicationContext.xml,最后通过测试类TestHelloSpring展示如何使用Spring的bean创建对象并调用方法。
30 0
|
1月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
|
1月前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
51 0
|
2月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
42 0