1、 添加maven支持

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

基本的注入,只要这一个依赖项即可

2、 编写几个测试类

假设场景: 有一个程序员jimmy, 他有几台电脑, 一个宠物,每天下班回家后,宠物会用某种形式欢迎他回家.

package com.cnblogs.yjmyzz.domain;

public abstract class Computer {

    public abstract void showInfo();
}
package com.cnblogs.yjmyzz.domain;

public class MacBook extends Computer {
@Override
public void showInfo() {
System.out.println("\tApple MAC Book");
}
}
package com.cnblogs.yjmyzz.domain;

public class ThinkPad extends Computer {

    @Override
public void showInfo() {
System.out.println("\tLenovo ThinkPad");
}
}
package com.cnblogs.yjmyzz.domain;

public abstract class Pet {

    public abstract void welcomeMeToHome();
}
package com.cnblogs.yjmyzz.domain;

public class Dog extends Pet {
@Override
public void welcomeMeToHome() {
System.out.println("\twang! wang!");
}
}
package com.cnblogs.yjmyzz.domain;

import java.util.List;

public class Programmer {

    private String name;

    private Pet pet;

    private List<Computer> computers;

    public void setName(String name) {
this.name = name;
} public List<Computer> getComputers() {
return computers;
} public void setComputers(List<Computer> computers) {
this.computers = computers;
} public void setPet(Pet pet) {
this.pet = pet;
} public void show() { System.out.print("My name is " + name);
System.out.print(", and I have " + computers.size() + " computer" + (computers.size() > 1 ? "s" : "") + ":");
System.out.println();
for (Computer c : computers) {
c.showInfo();
}
System.out.println("And I have a pet, everyday,when I go home, it will welcome me by ");
pet.welcomeMeToHome(); } }

3、 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"> <bean id="jimmy" class="com.cnblogs.yjmyzz.domain.Programmer">
<property name="name" value="jimmy.yang"/>
<property name="pet" ref="wangcai"/>
<property name="computers">
<list>
<ref bean="t60"/>
<ref bean="macbook_pro"/>
</list>
</property>
</bean> <bean id="t60" class="com.cnblogs.yjmyzz.domain.ThinkPad"/>
<bean id="macbook_pro" class="com.cnblogs.yjmyzz.domain.MacBook"/>
<bean id="wangcai" class="com.cnblogs.yjmyzz.domain.Dog"/> </beans>

这个配置文件SimpleBeans.xml中,一共配置了4个bean实例, 该配置被Spring容器加载后,这些对象都会被实例化(默认是单例模式实例化),并保持在容器中,需要使用的时候,可以手动通过ApplicationContext的getBean方法获取

4、 测试注入

为了注入方便,先写一个简单的工具类SpringUtils

package com.cnblogs.yjmyzz.utils;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringUtils { private static ApplicationContext applicationContext; private static ApplicationContext getContext() { if (applicationContext == null) {
applicationContext = new ClassPathXmlApplicationContext("SimpleBeans.xml"); }
return applicationContext; } public static <T> T getBean(Class<T> clazz, String beanName) { return getContext().getBean(beanName, clazz); }
}

然后就可以用这个工具类,通过getBean来获取注入的对象实例

package com.cnblogs.yjmyzz.test;

import com.cnblogs.yjmyzz.domain.Programmer;
import com.cnblogs.yjmyzz.utils.SpringUtils;
import org.junit.Test; public class TestSpring { @Test
public void testSimpleInject(){
Programmer jimmy= SpringUtils.getBean(Programmer.class,"jimmy");
jimmy.show();
} }

运行效果:
My name is jimmy.yang, and I have 2 computers:
    Lenovo ThinkPad
    Apple MAC Book
And I have a pet, everyday,when I go home, it will welcome me by  
    wang! wang!

下一篇将学习如何自动注入,以及如何使用properties属性文件来注入对象属性.

Spring 4.0.2 学习笔记(1) - 最基本的注入的更多相关文章

  1. Spring 4.0.2 学习笔记(2) - 自动注入及properties文件的使用

    接上一篇继续, 学习了基本的注入使用后,可能有人会跟我一样觉得有点不爽,Programmer的每个Field,至少要有一个setter,这样spring配置文件中才能用<property> ...

  2. Spring实战第八章学习笔记————使用Spring Web Flow

    Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...

  3. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  4. Spring Cloud微服务学习笔记

    Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...

  5. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  6. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

  7. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  8. ref:学习笔记 UpdateXml() MYSQL显错注入

    ref:https://www.cnblogs.com/MiWhite/p/6228491.html 学习笔记 UpdateXml() MYSQL显错注入 在学习之前,需要先了解 UpdateXml( ...

  9. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

随机推荐

  1. .NET 多语言支持解决方案(转)

    asp.net 2.0中的App_GlobalResources可以用来解决本地化的问题,程序会根据浏览器的语言首选项自动判断显示出本地化的界面. 首先在App_GlobalResources新建re ...

  2. 项目管理学习笔记之五.沟通协调能力II

    二.沟通模型:一个双向交流的过程 沟通模型:编     码---------------->信息-----------------> 解码&歧义发送者               ...

  3. pentaho cde popup弹出框口

    弹出窗口在pentaho cde里面相对比较容易,不过还是记录一下,以防时间久了,忘记关键参数. 先看一下效果图: 画出自己想要在弹出框展示的图形,把他的HtmlObject设置成弹出窗口,如图: 然 ...

  4. oracle报错:ORA-00054: 资源正忙,要求指定 NOWAIT

    ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源: --首先得到被锁对象的session_idselect session_id from v$locked_object; -- ...

  5. 今天说一下 Group by 这个东西

    group by 这个关键字,这个语句太平凡了~基本上只要有报表的地方,就会有它的身影. 常规用法就是 INSERT INTO #TypeValue ( TypeID, Col2 ) , N , N ...

  6. Swift内存管理、weak和unowned以及两者区别

    Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配.当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当一 ...

  7. PostgreSql常用脚本

    添加表字段 ALTER TABLE public.university ADD COLUMN "Province" character varying(10); COMMENT O ...

  8. Bootstrap模态框(modal)垂直居中

    http://v3.bootcss.com/ 自己也试了改了几种方式也不容乐观,发现在窗口弹出之前是获取不到$(this).height()的值,本想着是用($(window).height()-$( ...

  9. Python引用模块和查找模块路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译 ...

  10. emacs 新手笔记(三) —— 为 emacs 做一点简单的定制

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 在 emacs 启动时,会加载 ~/.emacs 文件.在该文件中编辑一些 lisp 代码,是一种最为简单的 ...