Spring之IOC底层实现原理

论坛 期权论坛     
选择匿名的用户   2021-5-28 04:12   0   0
<h1>一、Spring框架概述</h1>
<blockquote>
<ol><li>Spring框架是轻量级的开源的JavaEE框架</li><li>Spring框架可以解决企业应用开发的复杂性</li><li>Spring框架有两个核心部分:IOC和AOP</li><li>Spring框架特点:方便解耦,简化开发;AOP编程支持;方便程序测试;方便和其它框架进行整合;方便事务事务操作;降低API开发难度</li></ol>
</blockquote>
<h2>IOC概念和原理</h2>
<h3>1、什么是IOC?</h3>
<blockquote>
<ol><li>控制反转,把对象创建和对象之间的调用过程交给Spring框架进行管理</li><li>使用IOC的目的:为了耦合度降低</li><li>做入门案例就是IOC实现</li></ol>
</blockquote>
<h3>2、IOC底层原理</h3>
<blockquote>
<p>xml解析——XML有三种解析方式:DOM SAX STAX</p>
<p>存储和传输数据经常一起使用,XML数据通常由程序生成的,用程序解析XML(XML一般不加约束)</p>
<p> 配置文件单独使用(通常会加约束)</p>
<p>工厂模式——把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的</p>
<p>反射 ——反射可以在运行时根据指定的类名获得类的信息</p>
</blockquote>
<h3>3、IOC底层原理的图形解析</h3>
<p>第一种图解方式:</p>
<p><img alt="" height="514" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-fba93447f6dcde8d07d58e875653201c.png" width="656"></p>
<p>第二种图解方式(为了避免第一种创建过程中存在耦合度比较高的情况,使用IOC进行创建):</p>
<p><img alt="" height="676" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-b8b207150e0b1a260c0ab5a3b21abc5d.png" width="675"></p>
<h3>4、IOC接口</h3>
<blockquote>
<ol><li>IOC思想是基于IOC容器完成,IOC容器底层就是对象工厂</li><li>Spring框架中对IOC容器实现提供了两种方式(即两种接口)</li></ol>
<p>         2.1 第一种接口(BeanFactory接口):此接口是IOC容器的基本实现,也是Spring框架内部使用的接口,不提供给开发人员进行使用</p>
<p>注:此接口是在加载配置文件时不会创建对象,而是在获取对象或使用时才去创建对象</p>
<p>        2.2 第二个接口(ApplicationContext):此接口是BeanFactory接口的子接口,提供了更强大的功能,一般由开发人员进行</p>
<p>注:此接口在加载配置文件时就会创建配置文件中所配置的对象</p>
</blockquote>
<h3>5、ApplicationContext接口的所有实现类</h3>
<p><img alt="" height="170" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-089eca6c57dcbda4d29b3b16e1a79d52.png" width="618"></p>
<h3>6、IOC操作Bean管理(基于xml配置文件方式实现Spring框架中创建对象和注入属性)</h3>
<p>6.1 Spring框架中对象的创建</p>
<p>第一步:基于xml方式创建对象</p>
<pre class="blockcode"><code class="language-XML">&lt;!--创建对象--&gt;
&lt;bean id&#61;&#34;stu&#34; class&#61;&#34;com.spring.collection.Stu&#34;&gt;&lt;bean/&gt;</code></pre>
<blockquote>
<ol><li>在Spring框架配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象的创建</li><li>在bean标签中有很多属性,常用的属性介绍:id属性——唯一标识   class属性——类全路径</li><li>创建对象时默认执行无参构造方法完成对象的创建</li></ol>
</blockquote>
<p>6.2 Spring框架中对一个对象中的属性进行注入</p>
<blockquote>
<p>介绍注入属性之前,先介绍一下DI——就是依赖注入,也是属性注入</p>
</blockquote>
<h3>第一种注入的方式使用set方法进行注入</h3>
<p>第一步:创建类,定义属性和对应的set方法</p>
<pre class="blockcode"><code class="language-java">/**
* 演示使用set方法进行注入属性
*/
public class Book {
    //创建属性
    private String bname;
    private String bauthor;

    //创建属性对应的set方法
    public void setBname(String bname) {
        this.bname &#61; bname;
    }
    public void setBauthor(String bauthor) {
        this.bauthor &#61; bauthor;
    }
}</code></pre>
<p>第二步:在Spring配置文件中创建对象,然后配置属性注入</p>
<pre class="blockcode"><code class="language-java">&lt;!--2 set方法注入属性--&gt;
&lt;bean id&#61;&#34;book&#34; class&#61;&#34;com.spring5.Book&#34;&gt;
    &lt;!--使用property完成属性注入 name:类里面属性名称 value:向属性注入的值 --&gt;
    &lt;property name&#61;&#34;bname&#34; value&#61;&#34;易筋经&#34;&gt;&lt;/property&gt;
    &lt;property name&#61;&#34;bauthor&#34; value&#61;&#34;达摩老祖&#34;&gt;&lt;/property&gt;
&lt;/bean&gt;</code></pre>
<h3>第二种属性注入方式:使用有参构造进行注入</h3>
<p>第一步:创建类,定义属性,创建属性对应的有参构造方法</p>
<pre class="blockcode"><code class="language-java">/**
* 使用有参数
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP