第一步,
新建一个Java Project,
然后configure path -> add Libraries 导入Spring包内dist文件夹下的所有文件。
导入common-logging包
第二步,
新建一个PersonService.java文件
package org.crazyit.app.service;
public class PersonService
{
private String name;
//name属性的setter方法
public void setName(String name)
{
this.name = name;
}
//测试Person类的info方法
public void info()
{
System.out.println("此人名为:"
+ name);
}
}
新建一个SpringTest.java
package lee;
import org.crazyit.app.service.PersonService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest
{
public static void main(String[] args)
{
//创建Spring的ApplicationContext
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//输出Spring容器
System.out.println(ctx);
PersonService p = ctx.getBean("personService" , PersonService.class);
//其中,"personService"是在bean.xml中定义的id
p.info();
}
}
第三步,定义bean.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- **将PersonService类部署成Spring容器中的Bean** -->
<bean id="personService" class="org.crazyit.app.service.PersonService">
<property name="name" value="wawa"/>
</bean>
</beans>
输出wawa,
分析:
Spring容器根据配置文件信息,负责创建Person实例,并为Person实例设置属性值–这种由Spring容器为对象设置属性的方式称为-控制反转(Inversion of Control,IOC)
Person实例的属性并不是程序主动设置的,而是由Spring容器来负责注入的。
不管是依赖注入(Dependency Injection)还是控制反转(IOC,Inversion Of Control),其含义完全相同:
当某个Java实例(调用者)需要另一个Java实例(被调用者),传统程序设计中通常是由调用者来创建被调用者的实例。
在依赖注入模式下,创建被调用者的工作不再由调用者来完成,因此成为控制反转(IOC,Inversion Of Control);
创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入(Dependency Injection)。
所谓依赖注入,是指程序运行过程中,如果需要另一个对象协作(调用它的方法,访问它的属性)时,无须再代码中创建被调用者,而是依赖于外部容器的注入。