Spring5总述(二)—— IOC容器讲解,持续更新

了解更多关于Spring的基础知识

一、IOC的概念及底层原理

1、概念

  1. 控制反转:把对象创建和对象之间的调用过程,交给Spring进行管理.
  2. 目的:降低耦合度.(重要点)

2、底层原理:xml解析、工厂模式、反射.

利用代码理解底层原理

  1. 创建通用方法类
//通用方法类:
public class UserDao{
	public void add(){
		......
	}
}
  1. 原始java代码实现方法的调用
//原始方式调用上述方法。
class UserService{
    public static void main(String[] args) {
        UserDao dao = new UserDao();
        dao.add();
    }
}
  1. 工厂模式实现方法的调用
//工厂模式调用上述方法。
class UserFactory{
	public static UserDao getDao(){
		return new UserDao();
	}
}

class UserService{
    public static void main(String[] args) {
        UserDao dao = UserFactory.getDao();
        dao.add();
    }
}
  1. 利用IOC容器实现方法的调用
  • 第一步:xml配置文件,配置创建的对象
<bean id="dao" class="Spring.UserDao"></bean>
  • 第二步:有service类和dao类,创建工厂类
class UserFactory{
	public static UserDao getDao(){
		String classValue = "Spring.UserDao"//xml配置文件中bean标签的class属性值
		Class clazz = Class.forName(classValue);//通过反射创建对象
		return (UserDao)clazz.newInstance();	
}

class UserService{
    public static void main(String[] args) {
        UserDao dao = UserFactory.getDao();
        dao.add();
    }
}

二、IOC接口介绍

  1. IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
  2. Spring提供IOC容器实现两种方式(两个接口)
    • BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用。(特征:加载配置文件时不会创建对象,在获取对象(使用)才去创建对象。
    • ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。(加载配置文件时就会把配置文件对象创建)
  3. ApplicationContext常用接口实现类
    • FileSystemXmlApplicationContext:在指定的文件系统路径下查找xml文件
      ApplicationContext context = new FileSystemXmlApplicationContext("E:\\ideaiu\\idea-project\\spring-first\\src\\bean1.xml");
      
    • ClassPathXmlApplicationContext:在所有的类路径(包含JAR文件) 下查找xml文件
      ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
      

三、IOC操作Bean管理

1、概念

  1. 概念:Bean管理是指两个操作:Spring创建对象,Spring注入属性。
  2. Bean管理操作有两种方式
    • 基于xml配置文件方式实现
    • 基于注解方式实现

2、基于xml配置文件方式实现

1.基于xml方式创建对象

<bean id="user" class="spring.user"></bean>
  1. 在Spring配置文件中,使用bean标签,标签里面添加相应属性,就可以实现对象的创建。
  2. 在bean标签中有很多属性,在此先介绍两个常用的属性:
    • id属性:bean标签的唯一标识(了解:name属性:与id属性用处相同,可以在引号中加入特殊符号,但目前很少使用)
    • class属性:类全路径(包类路径)
  3. 创建对象时候,默认也是执行无参数构造方法完成对象创建。

2.基于xml方式注入属性

(1)第一种注入方式:使用set方法进行注入。
  1. 创建对象,并写出相应属性的set方法

    public class user {
    
        private String name;
        private String ID;
        // set方法注入属性
        public void setName(String name) {
            this.name = name;
        }
        
        public void setID(String ID) {
            this.ID = ID;
        }
        
        public void print(){
        	System.out.println(name+"......"+ID);
    	}
     }
    
  2. 在Spring配置文件中配置对象创建,配置属性注入(使用property实现)

        <bean id="User" class="spring.user">
        	<!--
        		name:user类里面属性的名称
        		value:向属性注入的值
        	-->
            <property name="name" value="Mr.liu"></property>
            <property name="ID" value="2021"></property>
        </bean>
    
(2)第二种注入方式:使用有参构造进行注入
  1. 创建对象,并写出有参构造方法

    public class user {
    
        private String name;
        private String ID;
    
        //构造器方法注入属性
        public user(String name, String ID) {
            this.name = name;
            this.ID = ID;
        }
    
        public void print(){
            System.out.println(name+"......"+ID);
        }
    }
    
  2. 在Spring配置文件中配置对象创建,配置属性注入(使用constructor-arg实现)

        <bean id="User" class="spring.user">
            <constructor-arg name="name" value="mr.liu"></constructor-arg>
    		<!--<constructor-arg index="0" value="mr.liu"></constructor-arg>-->
            <constructor-arg name="ID" value="2021"></constructor-arg>
        </bean>
    
(3)创建测试类,验证属性是否注入成功
  1. 创建测试类

        @Test
        public void testprintf(){
            //加载spring配置文件
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            //获取配置创建的对象
            user user1 = context.getBean("User",user.class);
            user1.print();
        }
    
  2. 测试结果

    mr.liu......2021
    

3、p名称空间注入属性

  1. 目的:使用p名称空间注入属性,可以简化基于Xml配置方式。
  2. 具体步骤
    • 第一步:添加p名称空间在配置文件中
    • 第二步:进行属性注入,在bean标签里面进行操作(基于set方法注入)
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--
        	xmlns:p为第一步
        	以下操作为第二步
        -->
        <bean id="User" class="spring.user" p:name="mr.liu" p:ID="2021"></bean>
    </beans>
    

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤
若对Spring基础知识感兴趣的可以关注一下博主,我会持续更新Spring基础知识(一边学习一边记录),一起进步,有错误的地方也可以在评论区指出来喔,谢谢大家啦!!!

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

offer冲冲冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值