IOC(概念和原理)

1、什么是IOC

  1. 控制反转,把对象创建过程和对象之间的调用过程,交给Spring进行管理
  2. 使用ioc目的:为了耦合度降低

2、IOC底层原理

  1. xml解析、工厂模式、反射

IOC(BeanFactory接口)

1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

2、Spring提供IOC容器实现的两种方式:(两个接口)

  1. BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时不会创建对象,在获取对象才会去创建对象

  2. ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用

    加载配置文件时候就会把在配置文件对象进行创建

3、ApplicationContext接口有实现类

IOC操作Bean管理

1、什么是Bean管理

  1. Bean管理指的是两个操作

    Spring创建对象

    Spring注入属性

2、Bean管理操作有两种方式

  1. 基于Xml配置文件的方式实现
  2. 基于注解方式实现

IOC操作Bean管理(基于xml方式)

1、基于xml方式创建对象

<bean id = "user" class="spring.User"></bean>

id属性:唯一标识

class属性:类全路径

创建对象的时候,默认也是执行无参构造方法完成对象创建

2、基于xml方式注入属性

  1. DI:依赖注入,就是注入属性

    第一种注入方式:使用set方法进行注入

  2. 创建类,定义属性和对应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>

第二种注入方式:使用有参数构造方法进行注入

  1. 创建类,定义属性,创建属性对应有参数构造方法
public class Order{private String name;private String address;public Order(String name, String address) {this.name = name;this.address = address;}
}
  1. 在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、字面量

  1. null值
<!-- 注入null值-->
<property name="address">
<null/>
</property>
  1. 属性值包含特殊符号
<!--属性包含特殊符号-->
<![CDATA[]]><property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>

2、注入属性-外部bean

  1. 创建两个类service类和dao类
  2. 在service调用dao里面的方法
  3. 在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

  1. 一对多关系:部门和员工

    一个部门有多个员工,一个员工属于一个部门

    部门是一,员工是多

  2. 在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

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原理基本使用(一)相关推荐

  1. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

  2. Spring的IOC原理[通俗解释一下]

    2019独角兽企业重金招聘Python工程师标准>>> 本文系转载,个人认为,这篇文章对IOC原理讲的比较清楚,通俗易懂,值得一看. 原文地址:http://blog.csdn.ne ...

  3. Java基础——Java反射机制及IoC原理

    一.概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.在java中,只要给定类的名字, 那么就可以通过反射机制 ...

  4. Java:Spring的IOC原理(大白话解释)

    先行参考以下半成品文章和参考链接,待学完课程后续整理此文章 IOC和DI关系 IOC:Inversion of Control,控制反转 DI:Dependency Injection,依赖注入 关系 ...

  5. Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程 ...

  6. Spring分析之IOC原理

    序言 无论是工作还是面试,少不了Spring相关的知识,例如spring的IOC原理,我们在工作中利用spring提供的接口做一些事情,例如InitializingBean接口,通过实现该接口,在实例 ...

  7. Spring Ioc原理解析

    Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...

  8. Spring的AOP与IOC原理

    一.IOC(Inversion of Control):控制反转 传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,这种方法耦合度极高,为了降低耦合度,Spring ...

  9. Spring IOC原理 Bean标签解析和Definition封装

    以下源码版本是 Spring 5.2.x IOC Inversion of Control 控制反转,关键实现是DI Dependency Injection,就必然涉及到有一个容器保存系统中所有托管 ...

  10. java 内省机制_Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...

最新文章

  1. PHP 常用字符串处理代码片段
  2. 电脑下边的任务栏不见了_XP系统任务栏被空白工具栏占领快速删除办法
  3. 自调用匿名函数(匿名闭包)解析与调用
  4. Spark的RDD操作之Join大全
  5. 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
  6. django 正则捕捉路径 re_path函数
  7. 【Calcite】Calcite 的SQL解析
  8. 海报素材模板|超好看的新年素材,你真的不来看一看吗?
  9. Go 2提上日程,官方团队呼吁社区给新特性提案提交反馈
  10. jxls遍历list时使用模板的批注语法
  11. Mybatis缓存实现原理
  12. 在 Half-Life MOD 中创建自己的武器及弹药
  13. MT1308芯片原厂
  14. 文字转语音软件哪个好,这一款值得推荐
  15. ajax浏览器崩溃,AJAX崩溃浏览器(200MB响应)
  16. cad 打开硬件加速卡_CAD经常性卡顿?要怎么解决?
  17. 嵌入式论文分析:Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing
  18. php artisan 计划任务,Laravel artisan命令及任务调度
  19. RecycleView简介及基本使用
  20. 令人拍案叫绝的Wasserstein GAN(转载)

热门文章

  1. python智力问答游戏代码,python实现智力问答测试小程序
  2. 作业5 | AR模型参数的估计
  3. 结构体的定义、初始化
  4. LoadBalancerCacheManager not available, returning delegate without caching.
  5. 小米miui查看连接过已保存的密码方法
  6. 利率市场化冲击传统资产负债管理 金融壹账通助力银行科技转型
  7. linux下制作windows启动盘,行家里手:Linux使用WoeUSB制作Windows启动盘
  8. 【墨者学院writeup】浏览器信息伪造之User-Agent及NetType微信网络检测破解
  9. Coursera | Applied Data Science with Python 专项课程 | Applied Machine Learning in Python
  10. Python实现多任务