Spring学习(3)-最简单的Spring例子

基于IntelliJ IDEA的Java EE Web Applicatin 4.0的Spring小例子

1.新建项目

1.1 新建一个Java EE Web Applicatin 4.0的项目

在这里插入图片描述

1.2 创建lib文件夹并导入基础包

可选择:

复制包到lib
在这里插入图片描述
右键导入到项目中
在这里插入图片描述

2.添加代码

比如:我想实现三个类:游戏(Game)、电脑(Computer)、玩家(Player)
他们三个之间的关系是:游戏依赖于电脑,电脑依赖于玩家
所以普通程序需要在电脑类中new一个游戏实例玩家类中new一个电脑实例,最后在主函数中调用玩家实例方法就实现了对三个类的控制。这是在每一个类中由程序员自己new出来每一个类需要的对象,耦合度很高。
通过Spring的基础5个包,可以使用Spring最核心的思想——IOC(控制反转)容器

依赖注入主要有两种实现方式,分别是属性 setter 注入和构造方法注入。具体介绍如下。

  • 属性 setter 注入
    指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static 工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。
  • 构造方法注入
    指 IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。

下面通过属性 setter 注入的案例演示 Spring 容器是如何实现依赖注入的。具体步骤如下。

2.1 java代码:

玩家类需要一个电脑类的对象,给予setComputer()

//玩家类
public class Player {
    private String userName;

    //依赖注入
    //1.声明依赖关系类
    private Computer computer;

    //2.提供赋值入口
    public void setComputer(Computer computer) {
        this.computer = computer;
    }

    //玩家游玩电脑里的游戏
    public void playGame() {
        System.out.println("我叫" + userName);
        System.out.println(computer.installGame());
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

电脑类需要一个游戏类对象,给予一个setGame()

//电脑模型
public class Computer {
	private String kind;
	//使用依赖注入,将applicationContext.xml配置中的依赖关系注入到Java代码中
	//1.声明所依赖的类,注意,依赖名要与配置文件汇总的依赖名相同
	//2.需要提供依赖注入的赋值入口
	private Game game;

	public void setGame(Game game) {
		this.game = game;
	}

	//使用电脑安装游戏
	public String installGame(){
		return "我在我的"+kind+"电脑上,安装了"+game.getGameName()+
		"这个游戏是"+game.getGameType()+"类型的";
	}

	public String getKind() {
		return kind;
	}

	public void setKind(String kind) {
		this.kind = kind;
	}
}

游戏类(底层类)

//游戏模型
public class Game {
    private String gameName;
    private String gameType;

    public String getGameName() {
        return gameName;
    }

    public void setGameName(String gameName) {
        this.gameName = gameName;
    }

    public String getGameType() {
        return gameType;
    }

    public void setGameType(String gameType) {
        this.gameType = gameType;
    }
}

Test.java(测试函数)

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	public static void main(String[] args) {
		//applicationContext.xml的默认加载路径是classpath => src
		//当工程启动时,IOC容器读取applicationContext.xml文件,加载配置项,进行实例化
		ApplicationContext context = new
		 ClassPathXmlApplicationContext("applicationContext.xml");
		//通过beanId获取实例
		Player player = (Player)context.getBean("player");
		player.playGame();
	}
}

2.2 创建Spring配置文件

在src下创建spring config的xml文件,默认名为applicationContext
在这里插入图片描述
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来加载实例
        当项目工程启动时 applicationContext.xml会被spring的ioc容器扫描所有的配置信息
        然后根据配置的beanId,查找对应的class,然后为这个class生产实例,等待使用。
        1.以前使用主动依赖的方式的方式在维护程序类之间的关系,耦合度太高,不利于程序扩展
        2.现在使用IOC控制翻转的设计思想,将class的实例在工程启动时就生产实例,在业务中需要时
        通过直接获取有效的降低了耦合,通过根据不同的业务进行组装搭配,实现另一个松散的耦合关系
     -->
    <!-- 装配Java类,每个bean就是指一个Java类 -->
    <bean id="game" class="com.cheng.spring.Game">
        <!-- 为实例的属性赋值 -->
        <property name="gameName" value="王者农药"/>
        <property name="gameType" value="推塔"/>
    </bean>

    <bean id="computer" class="com.cheng.spring.Computer">
        <!-- 为实例的属性赋值 -->
        <property name="kind" value="8848钛合金手机"/>
        <!-- 依赖关系注入 ,name是依赖的名字,ref是指具体装配的beanid -->
        <property name="game" ref="game"/>
    </bean>

    <bean id="player" class="com.cheng.spring.Player">
        <!-- 为实例的属性赋值 -->
        <property name="userName" value="此成非彼诚"/>
        <!-- 依赖关系注入 ,name是依赖的名字,ref是指具体装配的beanid -->
        <property name="computer" ref="computer"/>
    </bean>

</beans>

3.运行Test

右键run Test.main()
在这里插入图片描述
通过Spring的IOC容器,在不需要自己去实例化的情况下,完成了对三个类的实例化和控制。

4.总结

在程序执行时,对象的创建并不是通过 new一个类完成的,而是由 Spring 容器管理实现的。这就是 Spring IoC 容器思想的工作机制。

如果对你有所帮助,请点个赞支持一下,谢谢~

下一篇介绍 Spring Bean:Spring学习(4)-Spring Bean的配置、常用属性和注入方法

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值