通过一个小例子演视怎么通过 Spring 往程序中注入对象,而非手动 new 对象。
一、导入 Spring 所需要的包
spring-framework-2.5.6 版需要导入以下包: 1.—– spring.jar2.—– commons-logging.jar
spring-framework-3.2.4 版需要导入以下包: 1.—– spring-core-3.2.4.RELEASE.jar2.—– spring-beans-3.2.4.RELEASE.jar3.—– spring-context-3.2.4.RELEASE.jar4.—– spring-expression-3.2.4.RELEASE.jar5.—– commons-logging.jar但貌似 spring-framework-3.2.4 里并没有 commons-logging.jar包,可以使用spring-framework-2.5.6的或者使用Struts2的。
其他版本没有作测试。
二、添加一个测试用的实体类
User.java:
public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
三、添加Spring配置文件
在src目录下添加 applicationContext.xml 文件,,代码如下:
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=”http://www.springframework.org/schema/beans”
<bean> 为 com.startspring.User 类取了个id名为 user。
<property value=”hahahaha”/> 告诉Spring 创建User对象时为该对象的name属性值为”hahahaha”。
四、测试,通过Spring注入得到对象
public class Start { main(String[] args) {//把Spring配置文件名”applicationContext.xml”传进去。ApplicationContext appctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);//得到id为user对应类的对象User u = (User)appctx.getBean(“user”);System.out.println(u.getName());}}
可以看到,代码中并没有 new User对象,对象的创建都是由Srping完成,并为User对象的name属性赋值为 “hahahaha” 。
另外,在Spring 3.2.4 中会报Resource leak: ‘appctx’ is never closed 警告,eclipse 建议我们要关闭 ClassPathXmlApplicationContext 。在最后添加如下代码:
((ClassPathXmlApplicationContext)appctx).close();
完工。。。
那里面非常漂亮,个个观景区都能看到奇形怪状的岩石。