ITEEDU

集成Spring步骤详解

集成Srping先要下载Spring的相关文件,可以下载Spring提供的框架包,名如spring-framework-2.0-with-dependencies.zip,其中包含所需求jar包、源码、样例、文档等。以下描述中SPRING_HOME为此包解压后的目录。

导入spring依赖库

SPRING_HOME/dist/spring.jar

Spring的核心包。

SPRING_HOME/lib/jakarta-commons/commons-logging.jar

开源日志管理包,可以自动选择用是否用log4j。

SPRING_HOME/lib/log4j/log4j-1.2.14.jar

log4j核心包。

导入方法:右击项目,选properties,在打开的窗口中选中“Java Build Path”一项中的“Libraries标签”。“Add JARs”可以添加项目中的jar文件,“Add External JARs”可以添加系统中的jar文件。

复制配置文件到项目

主要为“spring配置文件”和“log4j配置文件”。

JAVA项目可以放到src目录下 ,WEB项目可以放到WEB-INF目录下。

可以从SPRING_HOME/samples中的示例项目中复制这两个文件,在WEB-INF目录下。

spring配置文件可以自己定,log4j配置文件一般为log4j.properties不要改动。

MyEclipse还可以配制“XML Catalog”

Spring配制文件在编辑时,可以有智能提示,这要通过配制编辑器的“XML Catalog”来实现。

SPRING_HOME/dist/resources/spring-beans-2.0.xsd即为配制bean时对应的智能提示文件。

配制步骤:

打开“Window\Preference\MyEclipse\Files and Editors\XML\XML Catalog”窗口。

选中“User Specified Entries”或“Plugin Specified Entries”点击添加按钮。

“Key ype”选URI,“Location”从文件系统选spring-beans-2.0.xsd。

重新选“Key ype”为“Schema location”。

把“Key”补全,后面加上“/spring-beans-2.0.xsd”。

最后“Key”应该类似“http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”。

这样编辑Spring配制文件时就会有智能提示了。

 Spring简单示例

数据层

package com.iteedu.service;

public interface IUserService {
	public void save(String userName,String pwd);
}

 

package com.iteedu.service;

public interface IUserService {
	public void save(String userName,String pwd);
}

 

package com.iteedu.dao;

public class UserDAO4OracleImpl implements IUserDAO {

	@Override
	public void save(String userName, String pwd) {
		System.out.println("-----UserDAO4OracleImpl-----");
	}
}

业务层

package com.iteedu.service;

public interface IUserService {
	public void save(String userName,String pwd);
}

 

package com.iteedu.service;

import com.iteedu.dao.IUserDAO;

public class UserServiceImpl implements IUserService {
	private IUserDAO userDAO;
	public UserServiceImpl(){}
	public UserServiceImpl(IUserDAO dao){
		userDAO=dao;
	}
	@Override
	public void save(String userName, String pwd) {
		userDAO.save(userName, pwd);
	}
	public IUserDAO getUserDAO() {
		return userDAO;
	}
	public void setUserDAO(IUserDAO userDAO) {
		this.userDAO = userDAO;
	}

}

客户端

package com.iteedu.client;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.iteedu.service.IUserService;

public class Client {
	public static void main(String[] args) {
//		IUserService service=new UserServiceImpl(new UserDAO4OracleImpl());
//		IUserService service=new UserServiceImpl(new UserDAO4MysqlImpl());
//		service.save("", "");
		BeanFactory fac=new ClassPathXmlApplicationContext("applicationContext.xml");
		IUserService us4Mysql=(IUserService) fac.getBean("userService4Mysql");
		us4Mysql.save("", "");
		IUserService  us24Oracle=(IUserService) fac.getBean("userService4Oracle");
		us24Oracle.save("", "");
	}
}

 Spring配制文件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"
	     xmlns:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
	<bean id="userDAO4Oracle" class="com.iteedu.dao.UserDAO4OracleImpl"/>
	<bean id="userDAO4Mysql" class="com.iteedu.dao.UserDAO4MysqlImpl"/>
	<bean id="userService4Mysql" class="com.iteedu.service.UserServiceImpl">
		<constructor-arg ref="userDAO4Mysql"/>
	</bean>
	<bean id="userService4Oracle" class="com.iteedu.service.UserServiceImpl">
		<property name="userDAO" ref="userDAO4Oracle"></property>
	</bean>
</beans>

用setter方法注入bean时,要么没有构造函数,要有必需有一空参的构造函数。以上配制中UserServiceImpl别用构造函数注入的setter方法注入,所以必需有一个空参构造函数,要不然用setter方法注入时生成不了UserServiceImpl实例。