IOC原理基本使用(一)
IOC(概念和原理)
1、什么是IOC
- 控制反转,把对象创建过程和对象之间的调用过程,交给Spring进行管理
- 使用ioc目的:为了耦合度降低
2、IOC底层原理
- xml解析、工厂模式、反射
IOC(BeanFactory接口)
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器实现的两种方式:(两个接口)
BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时不会创建对象,在获取对象才会去创建对象
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext接口有实现类
IOC操作Bean管理
1、什么是Bean管理
Bean管理指的是两个操作
Spring创建对象
Spring注入属性
2、Bean管理操作有两种方式
- 基于Xml配置文件的方式实现
- 基于注解方式实现
IOC操作Bean管理(基于xml方式)
1、基于xml方式创建对象
<bean id = "user" class="spring.User"></bean>
id属性:唯一标识
class属性:类全路径
创建对象的时候,默认也是执行无参构造方法完成对象创建
2、基于xml方式注入属性
DI:依赖注入,就是注入属性
第一种注入方式:使用set方法进行注入
创建类,定义属性和对应set方法
public class Book{private String name;private String author;public void setName(String name){this.name = name;}public void setAuthor(String author){this.author = author;}
}
2.在Spring配置文件中配置对象创建,配置属性注入
<bean id="book" calss="spring.Book"><!-- 使用propert完成属性注入 name:类里面的属性value:向属性注入的值--><property name="author" value="达摩老祖"></property><property name="name" value="易筋经"></property>
</bean>
第二种注入方式:使用有参数构造方法进行注入
- 创建类,定义属性,创建属性对应有参数构造方法
public class Order{private String name;private String address;public Order(String name, String address) {this.name = name;this.address = address;}
}
- 在spring配置文件中配置
<!-- 构造器注入属性 --><bean id="order" class="spring5.Order"><constructor-arg name="name" value="草莓摇摇奶昔"></constructor-arg><constructor-arg name="address" value="河北省石家庄市裕华区"></constructor-arg></bean>
## IOC操作Bean管理(xml注入其他类型属性)
1、字面量
- null值
<!-- 注入null值-->
<property name="address">
<null/>
</property>
- 属性值包含特殊符号
<!--属性包含特殊符号-->
<![CDATA[]]><property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
2、注入属性-外部bean
- 创建两个类service类和dao类
- 在service调用dao里面的方法
- 在spirng配置文件中进行配置
package spring5.dao;public interface UserDao {public void update();
}
package spring5.dao;public class UserDaoImpl implements UserDao{@Overridepublic void update() {System.out.println("dao update...........");}
}
package spring5.service;import spring5.dao.UserDao;public class UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void add(){System.out.println("service add...............");userDao.update();}
}
<bean id="userService" class="spring5.service.UserService">
<!-- 注入userDao对象name属性:类里面属性名称ref属性:创建userDao对象的bean标签id--><property name="userDao" ref="userDaoImpl"></property>
</bean><bean id="userDaoImpl" class="spring5.dao.UserDaoImpl"></bean>
3、注入属性-内部bean
一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
package spring5.bean;public class Department {private String dname;public void setDname(String dname) {this.dname = dname;}@Overridepublic String toString() {return "Department{" +"dname='" + dname + '\'' +'}';}
}
package spring5.bean;public class Employees {private String ename;private String gender;private Department department;public void setDepartment(Department department) {this.department = department;}public void setEname(String ename) {this.ename = ename;}public void setGender(String gender) {this.gender = gender;}public void add() {System.out.println(ename+"::"+gender+"::"+department);}
}
package spring5.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring5.bean.Employees;public class TestBean {public static void main(String[] args) {new TestBean().testBean();}public void testBean(){ApplicationContext ac = new ClassPathXmlApplicationContext("spring5\\bean2.xml");Employees employees = ac.getBean("employees", Employees.class);employees.add();}
}
<!-- 内部bean --><bean id="employees" class="spring5.bean.Employees"><!--设置两个普通属性--><property name="ename" value="lucy"></property><property name="gender" value="女"></property><!--设置对象类型属性--><property name="department" ><bean id="department" class="spring5.bean.Department"><property name="dname" value="会计部"></property></bean></property></bean>
IOC原理基本使用(一)相关推荐
- spring ioc原理分析
spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...
- Spring的IOC原理[通俗解释一下]
2019独角兽企业重金招聘Python工程师标准>>> 本文系转载,个人认为,这篇文章对IOC原理讲的比较清楚,通俗易懂,值得一看. 原文地址:http://blog.csdn.ne ...
- Java基础——Java反射机制及IoC原理
一.概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.在java中,只要给定类的名字, 那么就可以通过反射机制 ...
- Java:Spring的IOC原理(大白话解释)
先行参考以下半成品文章和参考链接,待学完课程后续整理此文章 IOC和DI关系 IOC:Inversion of Control,控制反转 DI:Dependency Injection,依赖注入 关系 ...
- Java反射及 IoC原理、内省机制
JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程 ...
- Spring分析之IOC原理
序言 无论是工作还是面试,少不了Spring相关的知识,例如spring的IOC原理,我们在工作中利用spring提供的接口做一些事情,例如InitializingBean接口,通过实现该接口,在实例 ...
- Spring Ioc原理解析
Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...
- Spring的AOP与IOC原理
一.IOC(Inversion of Control):控制反转 传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,这种方法耦合度极高,为了降低耦合度,Spring ...
- Spring IOC原理 Bean标签解析和Definition封装
以下源码版本是 Spring 5.2.x IOC Inversion of Control 控制反转,关键实现是DI Dependency Injection,就必然涉及到有一个容器保存系统中所有托管 ...
- java 内省机制_Java反射及 IoC原理、内省机制
JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...
最新文章
- PHP 常用字符串处理代码片段
- 电脑下边的任务栏不见了_XP系统任务栏被空白工具栏占领快速删除办法
- 自调用匿名函数(匿名闭包)解析与调用
- Spark的RDD操作之Join大全
- 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
- django 正则捕捉路径 re_path函数
- 【Calcite】Calcite 的SQL解析
- 海报素材模板|超好看的新年素材,你真的不来看一看吗?
- Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈
- jxls遍历list时使用模板的批注语法
- Mybatis缓存实现原理
- 在 Half-Life MOD 中创建自己的武器及弹药
- MT1308芯片原厂
- 文字转语音软件哪个好,这一款值得推荐
- ajax浏览器崩溃,AJAX崩溃浏览器(200MB响应)
- cad 打开硬件加速卡_CAD经常性卡顿?要怎么解决?
- 嵌入式论文分析:Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing
- php artisan 计划任务,Laravel artisan命令及任务调度
- RecycleView简介及基本使用
- 令人拍案叫绝的Wasserstein GAN(转载)
热门文章
- python智力问答游戏代码,python实现智力问答测试小程序
- 作业5 | AR模型参数的估计
- 结构体的定义、初始化
- LoadBalancerCacheManager not available, returning delegate without caching.
- 小米miui查看连接过已保存的密码方法
- 利率市场化冲击传统资产负债管理 金融壹账通助力银行科技转型
- linux下制作windows启动盘,行家里手:Linux使用WoeUSB制作Windows启动盘
- 【墨者学院writeup】浏览器信息伪造之User-Agent及NetType微信网络检测破解
- Coursera | Applied Data Science with Python 专项课程 | Applied Machine Learning in Python
- Python实现多任务