首页 > 代码库 > Spring学习笔记--Spring IOC

Spring学习笔记--Spring IOC

沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想.

6.Hello类

第一步:首先创建一个类Hello

package cn.sxt.bean;

public class Hello {
    private String name;
    public void setName(String name) {
		this.name = name;
	}
    public void show(){
    	System.out.println("hello,"+name);
    }
}

第二步:创建配置文件beans.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就是java对象,由spring容器来创建和管理 -->
    <bean name="hello" class="cn.sxt.bean.Hello">
        <property name="name" value="张三"></property>
    </bean>
</beans>

第三步:编写测试类Test

package cn.sxt.test;

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

import cn.sxt.bean.Hello;

public class Test {
	public static void main(String[] args) {
		//解析beans.xml文件生成管理相应的bean对象
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		Hello hello=(Hello)context.getBean("hello");
		hello.show();
	}
}

我们需要导入相关Jar包(在上一篇笔记Spring主要内容中显示的那些核心jar包)

技术分享

此时运行Test程序,会触发异常:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

我们需要添加commons-logging.jar文件

技术分享

步骤总结:

1)导入相关jar包

2)编写spring配置文件(名称可以自定义)

思考?

  Hello对象是谁创建的?

我们在Hello类中添加一个构造函数,可以确定Hello对象确定被创建:

package cn.sxt.bean;

public class Hello {
	public Hello() {
		System.out.println("hello 被创建");
	}
    private String name;
    public void setName(String name) {
		this.name = name;
	}
    public void show(){
    	System.out.println("hello,"+name);
    }
}

运行Test测试类结果显示:

hello 被创建
hello,张三

由此可以得知,Hello对象是由spring容器来创建的:bean工厂,可以包含多个bean,创建不同类的对象

<bean name="hello" class="cn.sxt.bean.Hello">
        <property name="name" value="张三"></property>
    </bean>

  Hello对象的属性是怎样设置的?

Hello对象的属性是由spring容器来设置的;

这个过程就叫做控制反转:

控制的内容:指的是谁来控制对象的创建;传统的应用程序,对象的创建是由程序本身来控制,使用Spring以后是由spring来创建对象的。

反转:有反转就有正转,正转指程序来创建对象,反转指程序本身不去创建对象,而变为被动的接收容器给我们创建的对象

总结:以前对象是由程序本身来创建,使用spring后,程序变为了被动接收spring创建好的对象;

控制反转有一个别名--依赖注入(DI-dependency injection)

DI:比如在我们的Hello类中,我们的类Hello就依赖于name属性,以来的这个name属性是由spring容器来设置的,name值的设置过程就叫做依赖注入(通过setName方法进行的依赖注入)

Spring学习笔记--Spring IOC