Spring中IoC创建对象方式(构造器注入)
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创建对象方式(构造器注入)相关推荐
- 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 ...
- Spring的IOC创建对象的方式和代码基本解释为什么要有ioc的思维以及Ioc容器和spring依赖注入的解释
首先我们要知道 Ioc是个啥? IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 ...
- spring IOC创建对象方式
spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...
- spring中ioc是什么
摘自:https://www.jb51.net/article/123900.htm IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则.下面通过本文给大 ...
- Spring中IOC和AOP的详细解释(转)
原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...
- java getbean方法_java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例...
java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例 发布于 2020-12-19| 复制链接 分享一篇关于关于spring中通过Applicat ...
- Spring中IoC两种接口和两种依赖注入方式的比较
spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...
- Spring框架IOC容器,依赖注入,控制反转
Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...
- Spring中IOC的理解(通俗易懂版)
文章目录 1.IOC提出背景 2:IOC的核心概念 3:IOC的实现方式 4:IOC的入门案例 (1):思路分析 (2):代码解析 5:DI入门案例 (1):思路分析 (2):代码解析 6:DI依赖注 ...
最新文章
- python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因
- 统计字符串中各类型的数字个数
- python的生成器
- 河南版权登记,给自己的“孩子”一个身份证
- Drools 7.11 :入门程序
- 如何纠正孩子打人、骂人的习惯?
- android设计风格是什么软件下载,基于MaterialDesign设计风格的妹纸app的简单实现
- python 内置变量
- 一种基于深度神经网络的临床记录ICD自动编码方法
- 批量制作通知书会议邀请函等模板式文本并快速批量发送邮件
- AI(adobe illustrator)怎么设置导出图片的像素尺寸
- 【数学】指数函数与对数函数的导数证明
- js 获取当天23点59分59秒 时间戳 (最简单的方法)
- Compilation is not supported for following modules
- Spark吐血整理,学习与面试收藏这篇就够了!
- 不同性质的公司在英文中不同说法
- 关于C++中静态多态性和动态多态性的理解
- 与Mr. Zuul男神的亲密接触 | 温哥华峰会Day3
- 互联网IT就业市场,你要说最有市场的一定是它,java面试常见笔试题
- 魔兽世界怀旧服显示从服务器断开,魔兽世界怀旧服服务器断开连接该怎么办_怀旧服服务器断开连接解决方法_3DM网游...