依赖注入(dependency injection)

之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。

依赖——指bean对象创建依赖于容器,bean对象依赖于资源(对象,常量,变量等)。

注入——bean对象依赖的资源通过容器来设置和装配(装配是指,比如一个对象A,需要一个对象B的实例,spring在配置对象A的时候,需要传入对象B的一个实例。会检查有没有有B,有的话,就拿来用,或者在配置对象其他属性时,传值的一个过程,叫装配)。

本章主要补充之前没有用到的注入方式,和总结学过的注入。

spring注入

常见的注入有下面这几种。p空间注入(spring2开始支持的注入,为了减少太多property引起的尖括号,需要在头文件中添加xmlns:p="http://www.springframework.org/schema/p", 如果报错点击File——Settings——Schemas and DTD,点加号,添加进去)

c空间注入(也是构造函数注入,和p空间注入用法一样,就没有写例子了),构造器注入,常量注入,数组注入,list注入,map注入,set注入,null注入,properties注入,bean注入。为了理解,以游戏为例,我们创建一个英雄。然后每种注入都用一次来配置。代码如下

目录

Hero代码

package cn.dota2.hero;

import cn.dota2.tpye.Type;

import java.util.List;

import java.util.Map;

import java.util.Properties;

import java.util.Set;

public class Hero {

public void setLv(String lv) {

this.lv = lv;

}

public void setExp(String exp) {

this.exp = exp;

}

private String name;//英雄姓名,通过构造器注入

private int hp,mp;//生命值,魔法值,通过常量注入

private Type hero_type;//肉盾类型。通过bean注入

private String[] article;//英雄持有物品,通过数组注入

private List skill;//技能,通过list注入

private Map buff;//英雄状态,String为名字,int为持续时间,通过map注入

private Set group;//队友,通过set注入

private String gold;//金钱,NULL注入

private Properties cool_down;//技能cd。通过Properties注入

private String lv,exp;//等级,经验值。通过p空间注入

/**

* 构造器注入

* @param name 英雄姓名

*/

public Hero(String name){

this.name=name;

}

/**set方法**/

public void setHp(int hp) {

this.hp = hp;

}

public void setMp(int mp) {

this.mp = mp;

}

public void setHero_type(Type hero_type) {

this.hero_type = hero_type;

}

public void setArticle(String[] article) {

this.article = article;

}

public void setSkill(List skill) {

this.skill = skill;

}

public void setBuff(Map buff) {

this.buff = buff;

}

public void setGroup(Set group) {

this.group = group;

}

public void setGold(String gold) {

this.gold = gold;

}

public void setCool_down(Properties cool_down) {

this.cool_down = cool_down;

}

/**set方法结束**/

public void show(){

System.out.println("英雄名:"+name);

System.out.println("生命值:"+hp+" 魔法值:"+mp);

System.out.println("英雄类型:"+ hero_type.getType());

System.out.println("英雄技能:"+skill);

System.out.println("技能状态:"+cool_down);

System.out.print("物品栏装备:");

for (int i=0;i

System.out.print(article[i]+" ");

}

System.out.println();

System.out.println("buff栏:"+buff);

System.out.println("队友:"+group);

System.out.println("当前金钱:"+gold);

System.out.println("当前经验值:"+exp+" 当前等级:"+lv);

}

}

Type代码

package cn.dota2.tpye;

public class Type {

private String type;//英雄类型

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

}

Test代码

package cn.dota2.test;

import cn.dota2.hero.Hero;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

public static void main(String[] args) {

ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");

Hero doom=(Hero) ac.getBean("doom");

doom.show();

}

}

beans代码

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

点金

飞鞋

辉耀

吞噬

焦土

阎刃

末日

蓝胖

刚背

猛犸

人马

未学习

5s

就绪

就绪

结果

这个例子也说明了spring的重要,如果不用依赖注入,那么游戏设计师每次设计技能,更新游戏数据,都需要更改源代码,这是非常危险的,而且游戏设计师不一定会,但是现在,我们只需要暴露出一个beans文件就可以了。

java 注入日志_java框架学习日志-5(常见的依赖注入)相关推荐

  1. java框架学习日志-2

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又 ...

  2. Spring学习-理解IOC和依赖注入

    最近刚买了一本介绍ssm框架的书,里面主要对Mybatis.spring.springmvc和redis做了很多的讲解,个人觉得虽然有的内容我看不懂,但是整体上还是不错的.最近正在学习中,一边学习一边 ...

  3. ASP.NET Core 2 学习笔记(四)依赖注入

    原文:ASP.NET Core 2 学习笔记(四)依赖注入 ASP.NET Core使用了大量的依赖注入(Dependency Injection, DI),把控制反转(Inversion Of Co ...

  4. SMM框架学习日志——Spring详述

    1.Spring5 1.1 简介 Spring makes programming Java quicker, easier, and safer for everybody. Spring's fo ...

  5. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  6. java 异步记录日志_java异步写日志到文件中实现代码

    java异步写日志到文件中详解 实现代码: package com.tydic.ESUtil; import java.io.File; import java.io.FileWriter; impo ...

  7. java ssh优势_java框架组合ssm和ssh各自的优势是什么?

    SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis). SSM优势: SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化 ...

  8. Spring框架学习教程,详解Spring注入bean的几种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Sprin ...

  9. java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...

    为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...

最新文章

  1. python书籍_Python 之父宣布加盟微软!包邮送几本 Python 书籍压压惊!
  2. Mac电脑如何显示隐藏文件
  3. linux通过管道的进程通信,linux 线程或进程之间通过管道通信(pipe)
  4. BZOJ 4823 Luogu P3756 [CQOI2017]老C的方块 (网络流、最小割)
  5. 925. Long Pressed Name 长按键入
  6. 打开DataGrip显示Load Data Ctrl+F5解决方案
  7. 密封槽设计标准_哈尔滨轴承 | 超全面机械密封选型
  8. 从编程语言排行来看:C/C++一直占有前三之位,为何C++不会消亡?
  9. iBase4J部署总结¥
  10. inventor牙距_滚子链计算基础知识 | Inventor 2018 | Autodesk Knowledge Network
  11. [ISA]部署ISA防火墙策略的十六条守则
  12. Qt编写安防视频监控系统58-子模块2窗口信息
  13. hazelcast 搭建_SpringBoot整合Hazelcast实现分布式缓存
  14. easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程
  15. 机器学习(周志华西瓜书) 参考答案 总目录
  16. linux通过mailx发送邮件
  17. Bearer Token 了解
  18. BAPI_GOODSMVT_CREATE MIGO预留成本中心201发货实例
  19. NTRIP Caster---SNIP服务器
  20. vi 命令 用法 (vi 方向鍵及 backspace 的問題 )

热门文章

  1. php 上传100m文件,PHP向MySQL中insert100M以上的文件
  2. python接口编程的好处_python接口自动化测试
  3. android studio 多个项目管理,Android Studio之同一应用创建多个Activity(一)
  4. python花式编码_Python编码常用套路
  5. 随机数插入排序c 语言,C语言程序设计100例之(22):插入排序
  6. 年货节页面PSD分层模板,拿稳了!应急!
  7. 平面图案素材|时尚民族印花的魔力
  8. 最火UI素材|短视频、直播APP套件,轻松搞定设计
  9. 配色方案为您的下一个设计项目准备,照着配准没错!
  10. UI干货素材模板|从做好网页头部内容设计开始!