1.基本概念
Spring是一个开源的IOC(DI)和AOP框架,可以简化企业级应用的开发。
(1) 轻量级:Spring是非侵入性的,基于spring开发的应用可以不依赖spring的API。
(2) spring是一个容器,它容纳并且管理对象的全声明周期
(3)spring实现了使用简单的组件配置组合成一个复杂的应用,在spring中可以使用XML和Java注解组合这些对象。
(4) 在IOC和AOP的基础上可以整合各种企业应用的开源框架(比如mybatis,Hibernate,struts2等)和第三方类库。
(4) Spring也提供了表现层的SpringMVC和持久层的Spring JDBC。
2. eclipse配置Spring
如何下载Spring,点击这里看方法,下载时需要下载类似于spring-framework-版本号.RELEASE-dist.zip的文件。里面包含了项目所用到的各种jar包。
在eclipse for java se上配置spring,首先要确保eclipse上首先配置好Java EE插件,如何配置,点击这里。否则spring安装时会提示失败。
emsp; 配置好Java EE插件后,还需要下载STS(Spring tool suite),点击这里下载,下载好了以后,打开eclipse–Help–Install New Software–add–archive,找到下载好的STS压缩包的位置,选择点击ok,待eclipse将压缩包解析后,只勾选有Spring IDE的项,然后点击下一步直到安装结束位置。
emsp; 安装好之后,重启eclipse在欢迎页显示出如下内容:
在Window–preferences,显示出如下内容:
3. Spring-HelloWorld
Spring的项目依赖以下五个包,在下载好的spring-framework文件中的libs目录下里找到图片中的后四个。commons-logging是spring依赖的日志包,下载日志包点击这里,如下述网页截图所示,如果需要源码还可以下载下面的源码。
上述五个jar包找到之后,在eclipse里新建项目Spring-HelloWorld,新建Folder命名为lib,将上述五个包复制到该文件夹下,全选之后build path–add to build path之后加载至类路径下。
在src目录下新建名称为com.spring.beans的包,新建类HelloWorld.java,写入如下代码:
package com.spring.beans;
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public void hello() {
System.out.println("hello:"+name);
}
}
同样在该包中创建一个Main.java的主类,内容如下:
package com.spring.beans;
import com.spring.beans.HelloWorld;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建HelloWorld的一个对象
HelloWorld helloWorld = new HelloWorld();
// 2.为name属性赋值
helloWorld.setName("sai");
//3.调用hello方法
helloWorld.hello();
}
}
如果不使用spring,通常我们按照上述的方式进行。采用spring之后,第一步第二步交给spring来完成。
在src下新建spring的配置文件,命名为applicationContext.xml,点到finish为止。
applicationContext.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 id="helloWorld" class="com.spring.beans.HelloWorld">
<property name="name" value="Sai"></property>
</bean>
</beans>
其中class属性值为HelloWorld的全类名,id值是给这个bean起一个标识。property标签表示属性,name属性中的name为bean中的属性,name对应的value值为Sai。紧接着将Main.java中的代码改为如下:
package com.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.beans.HelloWorld;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*//创建HelloWorld的一个对象
HelloWorld helloWorld = new HelloWorld();
// 为name属性赋值
helloWorld.setName("sai");*/
//1.创建spring的IOC容器对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从IOC容器中获取Bean实例
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
//调用hello方法
helloWorld.hello();
}
}
最后打印出的结果如下:
详细分析代码,下面这一行代码表示创建IOC容器对象,ClassPathXmlApplicationContext表示从类路径下获取spring bean的配置信息,执行完这一句,spring会调用HelloWorld(Bean)中的无参构造器创建一个HelloWorld类的实例,并调用setName()方法将配置文件中的name对应的value值传递给该对象。
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
经过上述的操作,在容器中就存在了一个实例对象,这个时候需要从容器中获取该对象,则执行下述语句,getBean()中的字符串即为先前设置的bean的id值。
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
之后再调用该对象的方法就顺理成章了。