SpringIOC框架的简单实现步骤

简单介绍

依赖注入( Dependency Injection ,简称 DI) 与控制反转 (IoC) 的含义相同,只不过这两个称呼是从两个角度描述的同一个概念,具体如下:

  • 依赖:bean对象的创建依赖于容器。
  • 注入:bean对象中的所有属性,由容器来注入。
  • 控制反转(IoC:依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做

依赖注入可以有效的解耦合。

具体实现

有两种实现的方法,一种是配置xml文件来实现,另一种是通过参数实现,来,找个简单的例子让咱们上手试一试。(Intellij IDEA 2020)

首先,咱们先配置一下相关的jar包(pom.xml)

     <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.5</version>
        </dependency>

创建一个Pet接口,存放方法say()

    public interface Pet {
    void say();
}

创建一个Person类

    public class Person {
    private String name;
    private Pet pet;

    public void setName(String name) {
        this.name = name;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    public void keepPet() {
        System.out.println(name + " 比" + pet + " 可爱,因为它会说");
        pet.say();
    }
}

创建一个Dog类,继承Pet接口

public class Dog implements Pet{
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
    public void say(){
        System.out.println("WangWang");
    }
}

重点来了,配置applicationContext.xml

<?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="dog" class="Ex_04.Dog">
        <property name="name" value="哈士奇"></property>
    </bean>
    <bean id="person" class="Ex_04.Person">
        <property name="name" value="拉布拉多"></property>
        <property name="pet" ref="dog"></property>
    </bean>
</beans>
  • bean中class为你所创建的包的地址,即Dao层,Service层的地址,为了方便我将其放在一起。
  • 为给dog类中name属性赋值哈士奇。
  • 元素value属性为一个具体的值,ref为引用,该代码中“ ref="dog" ”对应的是dog类的属性name,相当于new,此处可以体现解耦合。

基本类已创建完毕,让我们来创建一个实现类

输出结果为:拉布拉多 比哈士奇 可爱,因为它会说WangWang

总结

以上就就是以xml文件实现SpringIOC框架,如有错误,麻烦指出,感谢耐心到现在的朋友

到此这篇关于SpringIOC框架简单实现步骤的文章就介绍到这了,更多相关SpringIOC框架简单实现内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring实现一个简单的SpringIOC容器

    接触Spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是IOC容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心于是买了一本计文柯的<Spring技术内幕>,第二章没看完,就被我扔一边了,看的那是相当痛苦,深深觉得自己资质尚浅,能力还不够,昨天在网上碰巧看到一个实现简单的SpringIOC容器的视频教程,于是跟着做了一遍,竟然相当顺利,至少每一行代码都能理解,于是细心整理了一番,放在这里. 主要思想: 提到

  • 详解SpringIOC容器中bean的作用范围和生命周期

    bean的作用范围: 可以通过scope属性进行设置: singleton 单例的(默认) prototype 多例的 request 作用于web应用的请求范围 session 作用于web应用的会话范围 global-session 作用于集群环境的会话范围(全局会话范围) 测试: <!-- 默认是单例的(singleton)--> <bean id="human" class="com.entity.Human"></bean&g

  • SpringIOC refresh()初始化代码实例

    finishBeanFactoryInitialization(beanFactory):初始化不需要延迟实例化的单例bean /* org/springframework/context/support/AbstractApplicationContext.java:870 */ protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {//初始化容器的convers

  • SpringIOC DI循环依赖实例详解

    要弄清楚循环依赖 1.需要知道Bean初始化的两个阶段 ① Bean实例化创建实例对象(new Bean()) ② Bean实例对象初始化(DI:注解自动注入) 2.DefaultSingletonBeanRegistry类中的5个容器 /** 记录已将创建的单例<beanName,singletonBean> */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(

  • 简单了解SPRINGIOC的底层原理演变过程

    1.传统方式 UserService us = new UserService(); (UserService为一个java类,直接实例化成对象再进行操作) 2.面向接口 UserService us = new UserServiceImp(); (UserService为一个接口,UserServiceImp为接口实现类) 这样会导致web层和业务层产生耦合,程序设计应满足ocp原则 此时,若我想切换实现类,则我需要在代码中将UserServiceImp修改掉 3.工厂模式 创建工厂类,通过

  • 详解SpringIOC BeanDeifition

    BeanDefiton是什么? BeanDefition是Spring对POJO的抽象,通过BeanDefition来更好地创建.管理Bean. 定义 含义 beanClassName bean的类名.该属性并不总是对应着bean真正使用的类的名称.bean通过某个类的静态工厂方法生成,那么这beanClassName就是该类:bean通过工厂Bean生成,那么这里为null scope 作用域 singleton 或者 prototype lazyInit 是否懒加载 BeanFacotry中

  • 浅谈springioc实例化bean的三个方法

    1.构造器 也就是在上一篇讲的那个例子,调用默认的无参构造函数 2.静态工厂方法 1)创建需要执行的方法的类 public class HelloWorld { public HelloWorld(){ System.out.println("aaaa"); } public void hello(){ System.out.println("hello world"); } } 2)创建静态工厂 public class HelloWorldFactory { p

  • 基于springioc bean 的几个属性介绍

    1.lazy-init="false" 默认值为false,指的是bean的创建时机的spring容器一启动就会加载这些类.有点是及时发现bean的相关错误,因为spring容器启动,bean也都会创建完毕,如果bean有什么差错都会报出,缺点就是如果bean对象的开销较大,那会提前占用内存. 如果设置为true,则等到spring容器去获取该bean的对象时才会创建.优缺点与false相反 2.scope="singleton" 默认值就是singleton,指的

  • 一篇文章彻底理解SpringIOC、DI

    前言 你可能会有如下问题: 1.想看Spring源码,但是不知道应当如何入手去看,对整个Bean的流程没有概念,碰到相关问题也没有头绪如何下手 2.看过几遍源码,没办法彻底理解,没什么感觉,没过一阵子又忘了 本文将结合实际问题,由问题引出源码,并在解释时会尽量以图表的形式让你一步一步彻底理解Spring Bean的IOC.DI.生命周期.作用域等. 先看一个循环依赖问题 现象 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于C,C又依

  • SpringIOC框架的简单实现步骤

    简单介绍 依赖注入( Dependency Injection ,简称 DI) 与控制反转 (IoC) 的含义相同,只不过这两个称呼是从两个角度描述的同一个概念,具体如下: 依赖:bean对象的创建依赖于容器. 注入:bean对象中的所有属性,由容器来注入. 控制反转(IoC:依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做 依赖注入可以有效的解耦合. 具体

  • Django框架模型简单介绍与使用分析

    本文实例讲述了Django框架模型简单介绍与使用.分享给大家供大家参考,具体如下: ORM介绍 ORM Object relational mapping 对象关系映射 把面向对象中的类和数据库表一一对应起来,通过操作类和对象,对数据库表实现数据的增删改查等操作,而不需要写SQL语句(由orm框架生成) Django是实现了ORM的一个框架,在django项目与数据库之间起着桥梁的角色. 使用ORM可以通过方便的配置,切换使用不同的数据库 使用django进行数据库开发的步骤如下: 在model

  • python+selenium自动化框架搭建的方法步骤

    环境及使用软件信息 python 3 selenium 3.13.0 xlrd 1.1.0 chromedriver HTMLTestRunner 说明: selenium/xlrd只需要再python环境下使用pip install 名称即可进行对应的安装. 安装完成后可使用pip list查看自己的安装列表信息. chromedriver:版本需和自己的chrome浏览器对应,百度下载. 作用:对chrome浏览器进行驱动. HTMLTestRunner:HTMLTestRunner是Pyt

  • 搭建Go语言的ORM框架Gorm的具体步骤(从Java到go)

    目录 [提问] [解答] 1.检查Go的安装 2.安装Gorm 3.安装对应数据库的驱动 4.编写「数据库连接」代码 5.编写「数据Model」代码 6.编写「数据查询」代码 [提问] 如何使用Goland软件,搭建一个ORM框架GORM? [解答] 具体步骤如下: 1.检查Go的安装 在任意目录执行如下命令: go version 若有如下返回,则安装成功:如果报异常,则重新安装golang go version go1.19.1 darwin/arm64 2.安装Gorm 在任意目录执行如下

  • 网页五个简单PS步骤让你的照片更漂亮

    这是梦MM提供的一张片子,没有经过任何处理,除了修改尺寸.很显然这个图比较平淡,而且不锐利. 下面我们用几个简单PS步骤进行修改. 我的PS工作环境:工具栏在左边,历史和直方图在右边. 首先修改尺寸.对于在无忌上图最大尺寸长边可以1024像素,但我通常不喜欢用这么大,因为无忌上图还有一个限制:文件大小在200KB以下.如果文件尺寸大了在相同文件大小限制下质量就会牺牲. 第二步是修正曝光.如果有NEF/RAW文件应该在NikonCapture或者NikonView里面进行.因为我只有Jpeg,所以

  • oracle表的简单操作步骤

    1.创建表 create table test_1(num number(2) not null,name VARCHAR2(20) not null,primary key(num)); 创建了一个两个字段的表,num和name,都设置为非空,num设为主键,在创建表的时候经常一个"缺失左括号"的错误信息,估计是VARCHAR2类型后面没有加数据长度,加上就好了.这是用sql语句创建表,感觉要比右键新建要麻烦,可能有的时候不得不这样建表. 2.复制表 create table tes

  • PHP Yaf框架的简单安装使用教程(推荐)

    PHP开发组鸟哥惠新宸开发的php扩展框架 安装 windows下载扩展:https://pecl.php.net/package/yaf/2.2.9/windows 根据自己的电脑系统和php的版本号选择,NTS是线程不安全,TS是线程安全 根据phpinfo(),选择是否是线程安全 把php_yaf.dll扩展放到ext目录下 重启apache 使用 新建目录public,新建文件index.php入口文件 以上这篇PHP Yaf框架的简单安装使用教程(推荐)就是小编分享给大家的全部内容了,

  • Yii2框架数据库简单的增删改查语法小结

    User::find()->all(); //返回所有用户数据: User::findOne($id); //返回 主键 id=1 的一条数据: User::find()->where(['name' => 'ttt'])->one(); //返回 ['name' => 'ttt'] 的一条数据: User::find()->where(['name' => 'ttt'])->all(); //返回 ['name' => 'ttt'] 的所有数据: U

  • Java持久层框架MyBatis简单实例

    什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO). MyBatis 本是apache的一个开源项目iB

  • hibernate框架环境搭建具体步骤(介绍)

    一. 概述:hibernate框架是作用于dao层的,实现对数据的持久化保存.通过面向对象的方式操作数据库. 二. hibernate框架的搭建 1.导包 lib目录下的required文件夹下的所有jar包. mysql驱动包. 2.创建数据库于表. 3.创建实体类. 4.创建实体映射文件(以crm练习Customer类为例) 实体类名.hbm.xml 引入约束文件 <?xml version="1.0" encoding="UTF-8"?> <

随机推荐