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,此处可以体现解耦合

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

public class Text_04 {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) applicationContext.getBean("person");
person.keepPet();
}
}

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

总结

以上就就是以xml文件实现SpringIOC框架,如有错误,麻烦指出,感谢耐心到现在的朋友 : ) ---By 不断努力的Yang

SpringIOE-以xml方式实现的更多相关文章

  1. PHP 开发 APP 接口 学习笔记与总结 - JSON 结合 XML 方式封装通信接口

    要求: 1.在一个类中封装多种数据通信方法(JSON,XML),并且只通过一个入口选择需要的数据通信格式 2.客户端开发工程师可以自行选择数据传输格式(GET 方式) response.php < ...

  2. PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口

    1.PHP 生成 XML 数据 ① 拼接字符串 ② 使用系统类(DomDocument,XMLWriter,SimpleXML) 例1 使用 PHP 系统类中的 DomDocument 类: < ...

  3. 04_IOC容器装配Bean(xml方式)

    IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...

  4. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  5. C#操作XML方式

    前言 前一篇XML读取,现在咱们继续XML操作相关 C#中也有三种操作(增.删.改.查)XML文件方法如下: 使用 XmlDocument(DOM模式) 使用 XmlTextWriter(流模式) 使 ...

  6. AJAX二级下拉联动【XML方式】

    AJAX二级下拉联动案例 我们在购物的时候,常常需要我们来选择自己的收货地址,先选择省份,再选择城市- 有没有发现:当我们选择完省份的时候,出现的城市全部都是根据省份来给我们选择的.这是怎么做到的呢? ...

  7. 创建帧动画1 - xml方式

    废话不多说,先看东西   创建帧动画1 - xml方式 帧动画的创建方式主要以下2种: * 用xml创建动画: * 用代码创建动画:   本文内容主要关注 xml文件 创建帧动画的方式   xml文件 ...

  8. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  9. 使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”

    使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”. 原 ...

  10. xml方式封装数据方法

    1.xml方式封装数据方法 2.demo <?php xml方式封装数据方法 /** * [xmlEncode description] * @param [type] $code [descr ...

随机推荐

  1. OAuth2.0安全设计之Authorization Code

    OAuth 2.0 有 4 种认证流程: 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentia ...

  2. 微信小程序左右滚动公告栏效果

    <view class='notice-wrap' hidden='{{hideNotice}}'> <view class='tongzhitext'> <text c ...

  3. 微信小程序和H5之间相互跳转

    1.微信小程序跳转小程序 wx.navigateToMiniProgram <script src='https://res.wx.qq.com/open/js/jweixin-1.3.0.js ...

  4. PTA甲级—数学

    1.简单数学 1008 Elevator (20分) 模拟题 #include <cstdio> #include <cstring> #include <string& ...

  5. 实话实说:只会.NET,会让我们一直处于鄙视链、食物链的下游

    金三银四,是个躁动的季节. 结合最近的面试,谈一谈一个老牌开发人员的面试感悟. 大家都知道我的主力技术栈是 .NET + Devops + 弱前端 (当前技术认知,不排除以后变化). 面试了大小厂,有 ...

  6. Linux给防火墙开外网端口

    /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 80:外网端口

  7. JetBrains Projector 体验

    先来一张最终效果图: JetBrains Projector 是 JetBrains 的"远程开发"解决方案,基于 Client + Server 架构,对标的是微软 VSCode ...

  8. 阿里二面,面试官居然把 TCP 三次握手问的这么细致

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

  9. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

  10. 面向前端开发人员的VSCode自动化插件

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://blog.bitsrc.io/vscode-automations-for-fro ...