File →
New →
Project
选择Spring
,然后再 Libraries 下选择set up library later
- Use library : 如果你已下载好了jar包,可选择该项,然后点击Create . .选择导入所需的jar
- Download :如果你没有下载好所需jar,可选择该选项下载Spring所需的部分jar,并且它还会自动给你创建一个applicationContext.xml配置文件
- set up library later :如果你想在创建好项目后在自己手动导入jar,那么可以选择该选项
编辑项目名称,并选择项目所在路径
创建好的项目结构如下
在 src 下创建com.CD4356.ioc
包,在包中创建Student
类
Student类
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "我叫:"+this.name+",今年:"+this.age+"岁了...";
}
}
src → New → XML Configuration File → Spring config 创建Spring的配置文件
不对啊,为什么没有Spring config选项,是不是出什么问题了
原来Spring config是依赖于spring-beans-4.3.22.RELEASE.jar
产生的,而我们还没有导入该jar包,所以找不到Spring config选项
在SpringIoCDemo
项目下,新建lib
文件夹,然后到maven*仓库中下载spring-beans-4.3.22.RELEASE.jar
导入lib文件夹中,选择Add as Library
将jar包放在classpath路径下
继续 src → New → XML Configuration File → Spring config 创建Spring的xml配置文件,文件名为applicationContext
(文件名可任意)
发现导入spring-beans-4.3.22.RELEASE.jar
后,可以找到Spring config
选项了
创建好的applicationContext.xml文件如下所示,这些内容是自动生成的,我们还没有开始编辑该文件
编辑applicationContext.xml配置文件,内容如下
在src下创建一个测试类,名为SpringApplication
然后在编写加载XML配置文件代码时报错了,那么这是个什么错误呢?
因为ApplicationContext类
位于spring-context-4.3.22.RELEASE.jar
包中,而我们的项目中还没有带入该jar包,所以这里需要我们导入该jar包
解决ApplicationContext
报红后,ClassPathXmlApplicationContext
又报红了
spring-beans-4.3.22.RELEASE.jar
外部依赖spring-core-4.3.22.RELEASE.jar
,没有导入spring-core-4.3.22.RELEASE.jar包,无法找到xml配置文件
所以导入spring-core-4.3.22.RELEASE.jar
后可解决文题
ok,完成下面代码后,点击main函数左边的绿色三角标运行项目
哈哈!又报错了
缺少commons-logging-1.2.jar
包,以后如果遇到java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
,一般都是缺少jar包导致的( 当然也可能是找不到自定义类 )
复制org.apache.commons.logging mvn
到百度中(mvn即maven仓库
),进入maven仓库中找,下载导入项目中
又报错了
缺少spring-expression-4.3.22.RELEASE.jar
包
百度org.springframework.expression mvn
,下载spring-expression-4.3.22.RELEASE.jar
包
终于运行成功了
【由上面的内容可以看出,实现一个简单的Spring IoC示例至少需要用到5个jar(4个核心jar + 1个第三方日志jar
)包】
spring-context-4.3.18.RELEASE.jar
spring-beans-4.3.18.RELEASE.jar
spring-core-4.3.18.RELEASE.jar
spring-expression-4.3.18.RELEASE.jar
commons-logging-1.2.jar
【Spring配置文件】
Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的图纸
。
容器默认在src类路径下加载Spring配置文件,如果配置文件放在src的下一级目录下,则需要在ClassPathXmlApplicationContext(String configLocation)
中指定src下的存放路径
/**
* 在src目录下,新建一个spring包来存放applicationContext.xml
*/
ApplicationContext context=new
ClassPathXmlApplicationContext("spring/applicationContext.xml");
在一些大型项目中,会有多个配置文件,我们可以在ClassPathXmlApplicationContext()
方法中同时加载多个Spring配置文件
ApplicationContext context=new
ClassPathXmlApplicationContext(new String[]{"spring/applicationContext.xml",
"spring/spring-config.xml",...,"spring/spring-config5.xml"});
其中ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
【Spring配置文件中的<bean>
标签】
一个用来描述一个对象,id是唯一标识(根据id识别具体的Bean
),class表示该类的具体java文件(全类名
)
因为spring IoC是一个容器,我们在Spring配置文件中添加对类的描述
在我们加载IOC容器后,Spring就会全自动的为我们创建相应的对象
此时我们就无需再自己new创建对象了,而是直接通过getBean("bean标签中id的属性值"
)获取即可
这就是所谓的控制反转
,将创建对象的权限反转给Spring IoC容器,对类之间的关系进行了解耦,而这一切都离不开Spring配置文件中使用的标签
所以Spring IoC容器会帮我们做两件事:1. 创建对象 2. 为属性赋值
【Bean工厂的ApplicationContext】
Spring IoC设计的核心是Bean容器
BeanFactory采用了java经典的工厂模式,通过从xml配置文件中读取javaBean的定义,来实现javaBean的创建、配置和管理bean与bean之间的依赖关系,所以BeanFactory可以称为IoC容器
。
ApplicationContext的中文含义是: 应用上下文
,继承自BeanFactory接口,它除了包含BeanFactory的所有功能之外,还在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,使之成为Java EE应用放中首选的IoC容器
,可应用于Java APP和Java Web中。
BeanFactory 和 ApplicationContext 的不同之处
- BeanFactory容器实例化后并不会自动实例化bean,只有当bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配
- ApplicationContext容器实例化后会自动对所有的单实例bean进行实例化与依赖关系的装配,使之处于待用状态