Spring(Spring的理解+DI+Spring的创建)

导读:本篇文章讲解 Spring(Spring的理解+DI+Spring的创建),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. Spring 是什么

2. DI

3. 面试题: IoC 和 DI 有什么区别?

4. Spring 的创建

5. 将 Bean (对象) 存储到 Spring (容器) 中

6. 将 Bean (对象) 从 Spring (容器) 中取出来 

7. 面试题: ApplicationContext 和 BeanFactory的区别

8. getBean 更多用法


Spring(Spring的理解+DI+Spring的创建)

1. Spring 是什么

通常所说的 Spring 是 Spring Framework (Spring 框架), 

用一句话来解释 Spring: Spring 是包含了众多工具方法的 IoC 容器

那么什么是 IoC 容器? 

先来理解看一下什么是容器: 容器是用来容纳某种物品的 (基本) 装置

对比到前面的知识点,   目前接触到的容器有

  • List / Map –>  数据存储容器
  • Tomcat  –>  Web 容器

Spring 也是一个容器, Spring 是一个 IoC 容器

下面再看一下什么是 IoC ?

IoC = Inversion of Control 翻译过来就是 “控制反转” 的意思, 也就是

Spring 是一个 “控制反转” 的容器,

(“控制反转”:之前的控制权是在我身上,现在反转了,也就是我把控制权交出去了,交给框架了,下次我再要用X的时候,直接告诉框架,我要用X,而现在的X的生命周期和我没啥关系)

IoC 优点: 实现代码的解耦; 对象 (Bean) 生命周期交给 IoC 框架来维护,作为程序员无需再关注了

Spring IoC 容器最核心的功能:

  1. 将 Bean (对象) 储到 Spring (容器) 中
  2. 将 Bean (对象) 从 Spring (容器) 中出来 

Spring 是一个 IoC 容器, 说的是对象的创建和销毁的权利都交给 Spring 来管理了, 它本身又具备了存储对象和获取对象的能力. 


2. DI

说到IoC 就要提到 “DI”, DI 是 Dependency Injection 的缩写,翻译过来就是 “依赖注入” 的意思

依赖:比如说A类中,需要用到B类,那就说A依赖B

注入:将一个东西拿过来用就叫做注入

合起来”依赖注入”的意思就是: 有 IoC 容器在运行期间,动态的将某种依赖关系注入到对象中.

依赖注入的角度就是,通过引用 IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦,所以DI 是一种实现


3. 面试题: IoC 和 DI 有什么区别?

IoC 是一种思想: 控制反转

DI 是一种实现: 依赖注入 


4. Spring 的创建

(1) 创建一个 maven 项目

Spring(Spring的理解+DI+Spring的创建)

输入项目名就可以了

(2) 添加 spring 框架支持(spring-context/spring-beans)

先配置镜像国内源

Spring(Spring的理解+DI+Spring的创建)

Spring(Spring的理解+DI+Spring的创建)

<mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>

然后再添加Spring框架支持 

Spring(Spring的理解+DI+Spring的创建)

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

(3) 创建一个启动类并添加 main

Spring(Spring的理解+DI+Spring的创建)


5. 将 Bean (对象) 存储到 Spring (容器) 中

存储 Bean 对象三步(两步)走

  1. 如果是第一次添加, 先在 spring 项目中添加配置文件
  2. 先创建一个 Bean 对象
  3. 在配置文件中将需要保存到 spring 中的 Bean 对象进行注册

(1) 在 spring 项目中添加配置文件

Spring(Spring的理解+DI+Spring的创建)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

Spring(Spring的理解+DI+Spring的创建)

 (2) 创建一个 Bean 对象

Spring(Spring的理解+DI+Spring的创建)

(3) 在配置文件中将需要保存到 spring 中的 Bean 对象进行注册

id可以不等于 class 里面的类名,但是要尽量符合规范

类名使用大驼峰, bean id 通常使用小驼峰. 

假设类名是 UserInfo, 那么通常情况下 id 它应该是 userInfo 

Spring(Spring的理解+DI+Spring的创建)


6. 将 Bean (对象) 从 Spring (容器) 中出来 

获取并使用 Bean 对象,分为以下 3 步:
  1. 先得到 spring 上下文对象(ApplicationContext / BeanFactory)
  2. 再通过上下文对象提供的方法,获取需要使用的 bean 对象
  3. 可以使用 bean 对象
Spring(Spring的理解+DI+Spring的创建)
import com.beans.UserBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class app {
    public static void main(String[] args) {
        // 1. 得到 spring 上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

        // 2. 根据上下文对象提供的方法,获取需要使用的 bean 对象
        UserBean userBean = (UserBean) context.getBean("user");

        // 3. 可以使用 bean 对象
        userBean.sayHi("张三");
    }
}
import com.beans.UserBean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

public class app {
    public static void main(String[] args) {
        // 1. 得到 spring 上下文对象
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

        // 2. 根据上下文对象提供的方法,获取需要使用的 bean 对象
        UserBean userBean = (UserBean) beanFactory.getBean("user");
        
        // 3. 可以使用 bean 对象
        userBean.sayHi("张三");
    }
}
package com.beans;
//普通的 bean 对象
public class UserBean {
     public void sayHi(String name) {
         System.out.println("你好:" + name);
     }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 将一个对象存储到容器中 -->
    <bean id="user" class="com.beans.UserBean"></bean>
</beans>

7. 面试题: ApplicationContext 和 BeanFactory的区别

相同点: ApplicationContext 和 BeanFactory 效果是⼀样的, 都可以实现从容器中获取 bean,都提供了 getBean 的方法.

不同点:

从继承关系和功能方面来看: BeanFactory 提供了基础的访问容器的能力,

而 Application 属于 BeanFactory 的子类,它除了继承了 BeanFactory 的所有功能外,它还拥有独特的特性,还添加了对国际化支持,资源访问支持,以及事件传播等方面的支持.

从性能方面来看: Application 是一次加载并初始化所有的 Bean 对象(饿汉方式),

而 BeanFactory 是需要哪个才去加载哪个,所以更加的轻量(懒汉方式)


8. getBean 更多用法

(1) 使用 bean name 获取 bean

Spring(Spring的理解+DI+Spring的创建)

 (2) 根据 bean type 获取 bean

Spring(Spring的理解+DI+Spring的创建)

(3) 根据 bean name 和类型获取 bean (推荐使用)

Spring(Spring的理解+DI+Spring的创建)

Spring(Spring的理解+DI+Spring的创建)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87299.html

(0)
小半的头像小半
0 0

相关推荐

  • 【Mysql】复合主键的索引 技术随笔

    【Mysql】复合主键的索引

    0 0240
    小半的头像 小半
    2024年2月15日
  • 收到发送的*.md文档时,图片无法显示的问题 技术随笔

    收到发送的*.md文档时,图片无法显示的问题

    0 0315
    小半的头像 小半
    2023年2月16日
  • 【吐血推荐 二】那些让你打开新世界大门的网站 技术随笔

    【吐血推荐 二】那些让你打开新世界大门的网站

    0 0163
    Java朝阳的头像 Java朝阳
    2024年3月31日
  • MySQL在Linux中的安装和使用 技术随笔

    MySQL在Linux中的安装和使用

    0 0159
    飞熊的头像 飞熊
    2023年12月13日
  • SQL解析相关报错 技术随笔

    SQL解析相关报错

    0 0180
    小半的头像 小半
    2023年2月16日
  • 47. 六大类二叉树面试题汇总解答 技术随笔

    47. 六大类二叉树面试题汇总解答

    0 0152
    飞熊的头像 飞熊
    2023年5月5日
  • 网络安全如何学习 技术随笔

    网络安全如何学习

    0 0159
    小半的头像 小半
    2023年1月17日
  • 单调队列 + 前缀和:连续子序列的最大和 技术随笔

    单调队列 + 前缀和:连续子序列的最大和

    0 0170
    飞熊的头像 飞熊
    2023年7月30日
  • 绑定方法与非绑定方法 技术随笔

    绑定方法与非绑定方法

    0 0203
    小半的头像 小半
    2023年1月16日
  • Linux下文件权限查看并使用chomd修改文件权限 技术随笔

    Linux下文件权限查看并使用chomd修改文件权限

    0 0194
    小半的头像 小半
    2023年1月11日
  • HttpClient内外访问外网,添加代理(二) 技术随笔

    HttpClient内外访问外网,添加代理(二)

    0 0236
    小半的头像 小半
    2023年2月17日
  • 处理树形结构 技术随笔

    处理树形结构

    0 0178
    小半的头像 小半
    2023年2月10日

扫我!扫我!扫码!

Spring(Spring的理解+DI+Spring的创建)

站长精选

  • 一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业,太魔幻了!

    一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业,太魔幻了!

    2024年7月17日

  • 5款程序员必备的免费在线画图工具,超级好用!

    5款程序员必备的免费在线画图工具,超级好用!

    2022年11月15日

  • 你还在用 Shiro 做权限管理?来试试这个框架吧!

    你还在用 Shiro 做权限管理?来试试这个框架吧!

    2023年9月5日

  • 简化 Hello World:Java 新写法要来了!!

    简化 Hello World:Java 新写法要来了!!

    2023年4月25日

  • SpringBoot版的低代码开发平台,关联无 SQL,性能高10倍!

    SpringBoot版的低代码开发平台,关联无 SQL,性能高10倍!

    2022年12月29日

  • Dubbo-Activate实现原理

    Dubbo-Activate实现原理

    2022年11月21日

  • 如何保护你的 SpringBoot 项目:防止源代码泄露,确保更安全的部署

    如何保护你的 SpringBoot 项目:防止源代码泄露,确保更安全的部署

    2023年4月1日

  • 今天在地铁认识一个女程序员,在外包公司工作三年被裁,只赔偿 4000...

    今天在地铁认识一个女程序员,在外包公司工作三年被裁,只赔偿 4000…

    2023年12月17日

  • Mybatis-Plus 开发提速器:mybatis-plus-generator-ui 你确定不了解一下?

    Mybatis-Plus 开发提速器:mybatis-plus-generator-ui 你确定不了解一下?

    2023年2月20日

  • 不引入ES,如何利用 MySQL 实现模糊匹配

    不引入ES,如何利用 MySQL 实现模糊匹配

    2024年6月30日

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!

玻璃钢生产厂家广场标识玻璃钢景观雕塑厂江苏水果玻璃钢雕塑定制泉州园林玻璃钢雕塑直销玻璃钢雕塑制作流程图片苏州玻璃钢雕塑摆件生产开封玻璃钢现代雕塑呈贡设计玻璃钢雕塑哪里有卖茂名玻璃钢雕塑哪里买朝阳卡通玻璃钢雕塑定做商场中庭设计美陈北京欧式玻璃钢雕塑定制商场美陈装饰全案流程优质玻璃钢雕塑价格海东玻璃钢商场美陈江门玻璃钢动物雕塑货源充足云南水果玻璃钢雕塑优势曲阳玻璃钢雕塑多少钱嘉兴玻璃钢仿铜雕塑定做价格池州园林玻璃钢雕塑上海节庆商场美陈哪里有宜宾玻璃钢景观雕塑北京商场创意商业美陈哪家好濮阳玻璃钢雕塑哪家好东营玻璃钢人物雕塑厂家供应沈阳玻璃钢雕塑批发市场在哪浙江商场主题创意商业美陈理念玻璃钢卡通杏仁雕塑卢湾区玻璃钢花盆制作永城制作玻璃钢雕塑商家选哪家安乡玻璃钢花盆花器香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化