Ioc创建对象的方法分为无参构造创建和有参构造创建,首先看无参构造,也是Spring默认实现

这里给出一个User实体类

package com.zhiying.pojo;public class User {private String name;public User() {System.out.println("无参构造");}public String getName() {return name;}public void setName(String name) {this.name = name;}public void show() {System.out.println("name=" + name);}
}

然后对该实体类进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="user" class="com.zhiying.pojo.User"><property name="name" value="贺志营"/></bean>
</beans>

接下来进行测试

import com.zhiying.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user = (User) context.getBean("user");user.show();User user1 = (User) context.getBean("user");System.out.println(user == user1);}
}

结果:

你会看到,我们并没有new对象,但是无参构造被调用了,说明我们的Spring调用了,也就是帮我们创建好了对象,我们随用随拿,而且能看出我们拿的是同一个对象。在配置文件被加载的时候,容器种管理的对象被初始化

有参构造有三种方法,先看第一种

package com.zhiying.pojo;public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void show() {System.out.println("name=" + name);}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--这是无参构造实现-->
<!--    <bean id="user" class="com.zhiying.pojo.User">-->
<!--        <property name="name" value="贺志营"/>-->
<!--    </bean>-->
<!--    有参构造,直接通过参数名来控制,最常用--><bean id="user" class="com.zhiying.pojo.User"><constructor-arg name="name" value="贺志营"/></bean>
</beans>
import com.zhiying.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user = (User) context.getBean("user");user.show();User user1 = (User) context.getBean("user");System.out.println(user == user1);}
}

可以看到,也能出来,其中在配置文件中需要注意的是用constructor-arg而不是property了

第二种,在第一种的基础上改一下配置文件即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--这是无参构造实现-->
<!--    <bean id="user" class="com.zhiying.pojo.User">-->
<!--        <property name="name" value="贺志营"/>-->
<!--    </bean>--><!--    有参构造,直接通过参数名来控制,最常用-->
<!--    <bean id="user" class="com.zhiying.pojo.User">-->
<!--        <constructor-arg name="name" value="贺志营"/>-->
<!--    </bean>--><!--    有参构造通过类型创建,不常用--><bean id="user" class="com.zhiying.pojo.User"><constructor-arg type="java.lang.String" value="贺志营"/></bean>
</beans>

也可以运行出来

第三种,在第二种的基础上改一下配置文件即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--这是无参构造实现-->
<!--    <bean id="user" class="com.zhiying.pojo.User">-->
<!--        <property name="name" value="贺志营"/>-->
<!--    </bean>--><!--    有参构造,直接通过参数名来控制,最常用-->
<!--    <bean id="user" class="com.zhiying.pojo.User">-->
<!--        <constructor-arg name="name" value="贺志营"/>-->
<!--    </bean>--><!--    有参构造通过类型创建,不常用-->
<!--        <bean id="user" class="com.zhiying.pojo.User">-->
<!--            <constructor-arg type="java.lang.String" value="贺志营"/>-->
<!--        </bean>-->
<!--    有参构造通过下标赋值--><bean id="user" class="com.zhiying.pojo.User"><constructor-arg index="0" value="贺志营"/></bean>
</beans>

这样也可以出来,以上就是三种有参构造方法创建对象

Spring中IoC创建对象方式(构造器注入)相关推荐

  1. SSM—Spring框架,IOC理论推导,Hello Spring,IOC创建对象方式,Spring的配置,DI(依赖注入)

    文章目录 1.Spring 1.1.Spring简介(了解) 1.2.spring优点 1.3.组成(七大模块) 1.4.拓展 2.IOC理论推导 2.1.IOC本质 3.Hello Spring 4 ...

  2. Spring的IOC创建对象的方式和代码基本解释为什么要有ioc的思维以及Ioc容器和spring依赖注入的解释

    首先我们要知道 Ioc是个啥? ​ IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 ...

  3. spring IOC创建对象方式

    spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...

  4. spring中ioc是什么

    摘自:https://www.jb51.net/article/123900.htm IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则.下面通过本文给大 ...

  5. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  6. java getbean方法_java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例...

    java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例 发布于 2020-12-19| 复制链接 分享一篇关于关于spring中通过Applicat ...

  7. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

  8. Spring框架IOC容器,依赖注入,控制反转

    Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...

  9. Spring中IOC的理解(通俗易懂版)

    文章目录 1.IOC提出背景 2:IOC的核心概念 3:IOC的实现方式 4:IOC的入门案例 (1):思路分析 (2):代码解析 5:DI入门案例 (1):思路分析 (2):代码解析 6:DI依赖注 ...

最新文章

  1. python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因
  2. 统计字符串中各类型的数字个数
  3. python的生成器
  4. 河南版权登记,给自己的“孩子”一个身份证
  5. Drools 7.11 :入门程序
  6. 如何纠正孩子打人、骂人的习惯?
  7. android设计风格是什么软件下载,基于MaterialDesign设计风格的妹纸app的简单实现
  8. python 内置变量
  9. 一种基于深度神经网络的临床记录ICD自动编码方法
  10. 批量制作通知书会议邀请函等模板式文本并快速批量发送邮件
  11. AI(adobe illustrator)怎么设置导出图片的像素尺寸
  12. 【数学】指数函数与对数函数的导数证明
  13. js 获取当天23点59分59秒 时间戳 (最简单的方法)
  14. Compilation is not supported for following modules
  15. Spark吐血整理,学习与面试收藏这篇就够了!
  16. 不同性质的公司在英文中不同说法
  17. 关于C++中静态多态性和动态多态性的理解
  18. 与Mr. Zuul男神的亲密接触 | 温哥华峰会Day3
  19. 互联网IT就业市场,你要说最有市场的一定是它,java面试常见笔试题
  20. 魔兽世界怀旧服显示从服务器断开,魔兽世界怀旧服服务器断开连接该怎么办_怀旧服服务器断开连接解决方法_3DM网游...

热门文章

  1. yum 快速安装 LAMP
  2. SharePoint 开发系列之三:开发工具和流程
  3. ubuntu shell脚本出错 dash
  4. 树、森林和二叉树的转换
  5. Python3之max key参数学习记录
  6. spring和jdbctemplate
  7. mvc上传图片(上传和预览)webuploader
  8. TortoiseGit使用
  9. 【线性代数公开课MIT Linear Algebra】 第六课 AX=b与列空间、零空间
  10. c#与获得文件夹路径,站点目录