什么是IOC

  • 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
  • 使用IOC目的:为了耦合度降低
  • 做入门案例就是IOC实现

IOC底层原理

  • xml解析 工厂模式 反射

原始方式

class UserService{
execute(){
UserDao dao = new UserDao();
dao.add();
}
} class UserDao{
add(){
...
}
}
  • 缺点:耦合度太高

工厂模式

class UserService{
execute(){
UserDao dao = UserFactory.getDao();
dao.add();
}
} class UserDao(){
add(){
...
}
} class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
}
  • 目的:耦合度还可降低

IOC解耦过程

  1. xml配置文件,配置创建的对象

    <bean id = "own" class = "com.own.UserDao"></bean>

  2. 有service类和dao类,创建工厂类

class UserFactory{
public static UserDao getDao(){
String classValue = class属性值; // 1.xml解析
Class clazz = Class.forName(classValue); // 2.通过反射创建对象
retuen (UserDao) clazz.newInstance();
}
}
  • 进一步降低耦合度

IOC(接口)

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

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

  • BeanFactory:IOC容器基本实现,是SPring内部的使用接口,比提供开发人员进行使用

    • 加载配置文件的时候不会创建对象,在获取(使用)对象时才去创建对象
  • ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
    • 加载配置文件时就创建对象
  1. ApplicationContext接口实现类(主要两个)
  • FileSystemXmlApplicationContext (磁盘路径)

  • ClassPathXmlApplicationContext (相对路径)

//xml配置文件
<bean id = "user" class = "com.own.User"></bean> //Java类
public void test(){ //1. 加载spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); //2. 获取配置创建的对象
User user = context.getBean("user",User.class); }

IOC操作Bean管理(概念)

  1. 什么是Bean管理?
  • Bean管理指的是两个操作

    • Spring创建对象
    • Spring注入属性
  1. Bean管理操作有两种方式
  • 基于xml配置文件方式实现
  • 基于注解方式实现

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

  1. 基于xml方式创建对象

    <bean id = "user" class = "com.own.user"></bean>
  • 在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
  • 在bean标签中有很多属性,介绍常用的属性
    • id属性:唯一标识
    • class属性:类全路径(包类路径)
  • 创建对象时,默认执行无参数构造方法完成对象创建
  1. 基于xml方式注入属性
  • DI:依赖注入,就是注入属性

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

public class Book{
//1. 创建属性
private String bname;
//2. 创建属性对应的set方法
public void setBname(String bname){
this.bname = bname;
}
public void say(){
System.out.println("===>"+bname);
}
} //3. xml进行配置
<bean id = "book" class = "com.own.Book">
<property name = "bname" value = "zhangsan"><property>
</bean> //4. 测试
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Book book = context.getBean("book",Book.class);
System.out.println(book);
book.say();
} //原始方法:对象调用set方法
public static void main(String[] args){
Book book = new Book();
book.setBname("abc");
}

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

public class Book{
//1. 创建属性
private String bname;
//2. 创建属性对应的有参构造方法
public Book(String bname){
this.bname= bname;
}
public void say(){
System.out.println("===>"+bname);
}
} //3. xml进行配置
<bean id = "book" class = "com.own.Book">
//第一种方式:指定name
<constructor-arg name="bname" value="lee"><constructor-arg>
//第二种方式:下标法
<constructor-arg index="0" value="lee"><constructor-arg>
</bean> //4. 测试
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Book book = context.getBean("book",Book.class);
System.out.println(book);
book.say();
} //原始方法
public static void main(String[] args){
Book book = new Book("abc");
}

第三种注入方式:p名称空间注入(了解)

  • 可以简化基于xml配置方式
// 1. 添加p名称空间在配置文件中
<beans xmlns:p="http://www.springframework.org/schema/p">
//2. 进行属性注入,在bean标签里面进行操作,底层还是set注入
<bean id = "book" class="com.own.Book" p:name="wanger"></bean>
</beans>

Spring学习日记01_IOC_xml的三种注入方式的更多相关文章

  1. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  2. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  3. Spring IOC 三种注入方式

    1.    接口注入 2.    setter注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...

  4. Spring IOC以及三种注入方式

    IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...

  5. Spring IOC 中三种注入方式

    项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...

  6. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  7. .NetCore中三种注入方式的思考

    该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入 ...

  8. Spring的三种注入方式(Setter、构造函数和自动注入)

    一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...

  9. Spring IOC 三种注入方式(构造器,setter,接口)

    Spring的依赖注入有三种方式: 1,构造器注入 2,setter注入 3,接口注入 下面我给大家介绍一下这三种注入 1.构造器注入 构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是 ...

随机推荐

  1. linux跨文件复制粘贴

    跨文件是这样的: 复制a.txt的第20行至第30行到b.txt中vi a.txt:2010yy:e b.txtp

  2. spring为何要注入接口,而注入接口的实现类就会报错

    首先说明,注入的对象确实为实现类的对象.(并不是实现类的代理对象,注入并不涉及代理) 如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术 ...

  3. [bug] Python Virtualenv 安装失败:ERROR: Cannot uninstall 'filelock'.

    参考 https://my.oschina.net/gain/blog/4333100

  4. zabbix监控之用户及用户组

    一.概述 Zabbix 中的所有用户都通过 Web 前端去访问 Zabbix 应用程序.并为每个用户分配唯一的登陆名和密码. 所有用户的密码都被加密并储存于 Zabbix 数据库中.用户不能使用其用户 ...

  5. Nginx|Apache目录权限禁止执行PHP设置

    Ngnix: location ~ /upload/.*.(php|php5)?$ { deny all; } 这就是禁止upload内执行php,但是图片可以打开哦 多目录禁止: location ...

  6. F5 BIG-IQ 8.0 发布 - 借助一个统一的管理平台,管理您的所有 BIG-IP 设备和服务

    针对完整可见性和控制的 BIG-IQ 集中式管理 BIG-IP 设备和服务的端到端控制 高效管理(编排.可见性和合规性)依赖于跨本地和云部署中始终如一的应用服务和安全策略.利用独立统一的管理平台实现对 ...

  7. GO学习-(28) Go语言操作influxDB

    Go语言操作influxDB 本文介绍了influxDB时序数据库及Go语言操作influxDB. InfluxDB是一个开源分布式时序.事件和指标数据库.使用Go语言编写,无需外部依赖.其设计目标是 ...

  8. pytest - 失败重运行机制:rerun

    失败重运行机制 用例失败的情况下,可以重新运行用例 一旦用例失败,马上重新运行 安装插件:pip install pytest-rerunfailures 使用命令:--reruns 重试次数 如 - ...

  9. Jmeter- 笔记1 - 理论知识

    为什么不用loadrunner,lonadrunner免费最大并发用户50,再往上就要买license了. 性能输出结果不是bug 假如调试脚本没有出错,但运行脚本时,可能前期没有问题,但到后期偶尔/ ...

  10. Eclipse修改方法内容不用重启Jetty服务器

    我Eclipse以前DEBUG模式时,修改方法里的内容是不用重启的, 现在修改方法里是一行代码都要重启服务器了,很麻烦,速度慢了,找了百度,那些方法对我不合适,可能遇到的问题不一样. 也许会合适遇到和 ...