Spring Ioc创建对象的方式
官网:https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/core.html#spring-core
1.新建实体类
/*** @author LongXi* @create 2021-05-25 20:17*/
public class Hello {private String str;public String getStr() {return str;}public void setStr(String str) {this.str = str;}@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}';}
}
配置文件
<?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"><!--使用spring来创建对象,在spring中这些都成为bean类型 变量名 = new 类型()id = 变量名class = new 的对象property 相当于给对象属性设置一个值--><bean id="hello" class="com.lx.pojo.Hello"><property name="str" value="Hello Spring"/></bean></beans>
测试类:
/*** @author LongXi* @create 2021-05-25 20:35*/
public class MyTest {public static void main(String[] args) {// 获取spring上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 我们的对象都在spring中管理了,我们要使用,直接去里面去就可以了Hello hello = (Hello) context.getBean("hello");System.out.println(hello.toString());}
}
案例1改修
添加配置文件
<?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="userDaoImpl" class="com.lx.dao.UserDaoImpl"/><bean id="userDaoMySqlImpl" class="com.lx.dao.UserDaoMySqlImpl"/><bean id="userServiceIpml" class="com.lx.service.UserServiceIpml"><property name="userDao" ref="userDaoMySqlImpl"></property></bean></beans>
修改测试类
/*** @author LongXi* @create 2021-05-24 21:34*/
public class MyTest {public static void main(String[] args) {//用户实际调用的是业务层,dao层他们不需要接触
// UserService userService = new UserServiceIpml();
// ((UserServiceIpml)userService).setUserDao(new UserDaoMySqlImpl());
// userService.getUser();// 获取ApplicationContext上下文,拿到spring容器ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");//容器在手,天下我有,想用什么,get什么UserServiceIpml userServiceIpml = (UserServiceIpml) context.getBean("userServiceIpml");userServiceIpml.getUser();}
}
执行结果
方式1:使用无参构造方式
pojo实体类
/*** @author LongXi* @create 2021-05-26 20:52*/
public class User {private String name;public User (){System.out.println("user 的无参构造");}public void show(){System.out.println("name="+name);}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
bean.xml
<?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.lx.pojo.User"><property name="name" value="龙兮"/></bean></beans>
测试类
/*** @author LongXi* @create 2021-05-26 20:55*/
public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");User user = (User) context.getBean("user");user.show();}
}
下面我们创建一个有参构造,替换掉无参构造
public User (String name){System.out.println("user 的无参构造");}
运行出错
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.lx.pojo.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.lx.pojo.User.()
方式二:使用有参构造
第一种:下表赋值
我们改变bean.xml配置文件
<?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.lx.pojo.User"><constructor-arg index="0" value="龙兮"/></bean>
</beans>
第二种:类型赋值
我们改变bean.xml配置文件
<?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.lx.pojo.User"><constructor-arg type="java.lang.String" value="龙兮"/></bean></beans>
测试成功
思考问题:
假如有2个参数都是String呢?所以这种方式不建议使用。
第三种:直接通过参数名设置-
<?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.lx.pojo.User">-->
<!-- <property name="name" value="龙兮"/>-->
<!-- </bean>-->
<!-- <!–第一种:下表赋值–>-->
<!-- <bean id="user" class="com.lx.pojo.User">-->
<!-- <constructor-arg index="0" value="龙兮"/>-->
<!-- </bean>-->
<!-- <!–第二种:通过类型创建–>-->
<!-- <bean id="user" class="com.lx.pojo.User">-->
<!-- <constructor-arg type="java.lang.String" value="龙兮"/>-->
<!-- </bean>--><!--第三种:直接通过参数名设置--><bean id="user" class="com.lx.pojo.User"><constructor-arg name="name" value="龙兮"/></bean></beans>
测试成功
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了。
user 和userT
Spring Ioc创建对象的方式相关推荐
- spring IOC创建对象方式
spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...
- Spring学习3之IOC创建对象的方式
前言 我们学习了IOC是什么,并且练习了一个Spring程序,知道了对象是由Spring创建,管理,装配.IOC有哪些创建对象的方法呢? 一.IOC创建对象的方式 <!--IOC创建对象的方式 ...
- Spring(三)——HelloSpring、IOC创建对象的方式、属性注入、自动装配、使用注解开发
文章目录 1. 简介 2. IOC理论推导 3. HelloSpring 4. IOC创建对象的方式 4.1 使用无参构造创建对象(默认) 4.2 使用有参构造创建对象 5. Spring配置 5.1 ...
- Spring的IOC创建对象的方式和代码基本解释为什么要有ioc的思维以及Ioc容器和spring依赖注入的解释
首先我们要知道 Ioc是个啥? IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 ...
- Spring——Spring容器创建对象的方式
目录 1.Spring容器创建对象的特点 2.Spring容器创建对象的时间 3. Spring容器创建对象能创建几个 4.使用 spring 容器创建的 java 对象图解 1.Spring容器创建 ...
- spring(一):spring IoC的注入方式总结
前言:谈谈对springIOc的理解,两张图很好的阐述了springIoc容器的作用. 传统应用程序示意图.jpg IoC容器后程序结构示意图.jpg springIoC容器注入方式有set注入,构造 ...
- Spring(一)——用Spring IOC容器创建对象
文章目录 1. Spring简介 2. 创建一个Spring项目 3. 用Spring IOC创建对象 1. Spring简介 是作为Java EE开发的一个框架,可以实现对象的注入.事务管理.面向切 ...
- 【Spring】Spring IOC学习笔记
Spring IOC Spring简介 Spring理念 使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架 Spring优点 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 ...
最新文章
- python函数的作用是_Python函数一
- python空字典对象相当于false吗_python怎么判断某一对象是否为字典
- 清空python的变量
- ArchiCAD 23中文版
- 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0......
- vue路由参数改变,组件数据没重新更新问题
- windows下 dos 执行php 代码
- LeetCode 424. 替换后的最长重复字符(双指针+滑动窗口)
- 【FLUENT案例】04:利用DDPM+DEM模拟鼓泡流化床
- EditPlus中有用的快捷键
- Come On, Baby!
- 工作流系统之三十三 撤回的实现
- esri开发大赛项目总结
- 我假装考上了浙江大学
- 第一个微信小程序的诞生
- 各标点符号的英文名称
- zynq usb dwc3中断事件异常
- Max Script|物体选择和拷贝
- 领取CPS外卖红包攻略及小程序项目源码
- Excel如何隔一行或几行填充颜色