`

spring 初探

阅读更多

Spring核心设计思想为IOC(Inverse of Control)或依赖注入(Dependence Injection)。

IOC即由容器来控制程序之间的关系,而非传统代码直接操控。

先看第一个spring项目,该项目由上文

http://quicker.iteye.com/blog/666673

项目改写而成,使用spring。

1、spring依赖库的配置:
	* SPRING_HOME/dist/spring.jar
	* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
	* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
	
2、将spring的配置文件拷贝到src下

3、在UserManagerImpl类中,我们定义setter方法,让spring将实例化好的UserDao对象实现给我们

4、让spring管理我们对象的创建,让spring管理对象的依赖,即定义spring配置文件

5、在客户端,通过BeanFactory来访问spring管理的对象,如:

		//通过配置文件初始化工厂
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//通过bean工厂取得工厂中的对象
		UserManager userManager = (UserManager)factory.getBean("userManager");


spring的关键点:
	* 让spring来管理你的对象,需要将被管理的对象定义在配置文件中
	* 定义setter方法或构造函数
	
以上两步缺一不可,只有这样定义之后,你的对象之间的依赖关系才能被spring管理

		

程序结构图:

 看具体代码:

package com.lwf.bean;

public class User {

	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;
	}
}

 

package com.lwf.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.lwf.bean.User;
import com.lwf.manager.UserManager;

public class Client {
	public static void main(String[] args) {
	
		User user = new User();
		user.setAge(11);
		user.setName("zhangshang");
		
		ApplicationContext ctx = new FileSystemXmlApplicationContext("/src/applicationContext.xml");
		//BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserManager userManager = (UserManager)ctx.getBean("userManager");
		userManager.save(user);
		
		
	}
}

 

package com.lwf.dao;

import com.lwf.bean.User;

public interface UserDao {

	void save(User user);
}

 

package com.lwf.dao;

import com.lwf.bean.User;

public class UserDaoImp4MySql implements UserDao {

	@Override
	public void save(User user) {
		// TODO Auto-generated method stub
		System.out.println("UserDaoImp4MySql");
		System.out.println("UserName :" + user.getName() + "User Age:" + user.getAge());
	}

}

 

package com.lwf.dao;

import com.lwf.bean.User;

public class UserDaoImp4Oracle implements UserDao {

	@Override
	public void save(User user) {
		// TODO Auto-generated method stub
		System.out.println("UserDaoImp4Oracle");
		System.out.println("UserName :" + user.getName() + "User Age:" + user.getAge());
	}

}

 

package com.lwf.manager;

import com.lwf.bean.User;

public interface UserManager {
	 void save(User user);
}

 

package com.lwf.manager;

import com.lwf.bean.User;
import com.lwf.dao.UserDao;

public class UserManagerImp implements UserManager {

	private UserDao userDao ;
	public void save(User user) {
		// TODO Auto-generated method stub
		userDao.save(user);
	}

	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
}

 

 

下面是配置文件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.5.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


	
	<bean id="userDaoImp4MySql" class="com.lwf.dao.UserDaoImp4MySql"/>
	<bean id="userDaoImp4Oracle" class="com.lwf.dao.UserDaoImp4Oracle"/>
	<bean id="userManager" class="com.lwf.manager.UserManagerImp">
		<property name="userDao" ref="userDaoImp4Oracle"/>
	</bean>

</beans>

 

还有一个log4j.properties文件。

# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${petstore.root}/WEB-INF/petstore.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

 

 

说明:

配置文件中:

	<bean id="userDaoImp4MySql" class="com.lwf.dao.UserDaoImp4MySql"/>
	<bean id="userDaoImp4Oracle" class="com.lwf.dao.UserDaoImp4Oracle"/>
	<bean id="userManager" class="com.lwf.manager.UserManagerImp">
		<property name="userDao" ref="userDaoImp4Oracle"/>
	</bean>

上面代码实际上spring为UserManagerImp类设置属性userDao。我们的测试代码创建User类,然后再通过代码:

	ApplicationContext ctx = new FileSystemXmlApplicationContext("/src/applicationContext.xml");
		//BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserManager userManager = (UserManager)ctx.getBean("userManager");
		userManager.save(user);

 

实际上代码中对于UserDao我们有两个实现,一个是mysql一个是oracle的实现。那么假如客户要在不同的数据库进行迁移,我们只要将 ref="userDaoImp4Oracle"改为 ref="userDaoImp4MySql"即可。

默认输出结果为:

2010-05-17 16:22:05,593 INFO [org.springframework.context.support.FileSystemXmlApplicationContext] - Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@19fcc69: display name [org.springframework.context.support.FileSystemXmlApplicationContext@19fcc69]; startup date [Mon May 17 16:22:05 CST 2010]; root of context hierarchy
2010-05-17 16:22:05,765 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [D:\workdirlocal\spring_start\src\applicationContext.xml]
2010-05-17 16:22:06,203 INFO [org.springframework.context.support.FileSystemXmlApplicationContext] - Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext@19fcc69]: org.springframework.beans.factory.support.DefaultListableBeanFactory@5e5a50
2010-05-17 16:22:06,234 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5e5a50: defining beans [userDaoImp4MySql,userDaoImp4Oracle,userManager]; root of factory hierarchy
UserDaoImp4Oracle
UserName :zhangshangUser Age:11

 

分享到:
评论

相关推荐

    pring初探共18页.pdf.zip

    标题中的“Spring初探共18页.pdf.zip”表明这是一个关于Spring框架的压缩文档,共有18页PDF内容。从标签“Spring初探共18页.pdf”我们可以推测,这份资料可能是一个关于Spring框架基础入门的学习资料,适合初学者。 ...

    java学习之spring2.0

    - **Spring 初探**:Spring的核心在于依赖注入(DI)和面向切面编程(AOP),提供了一个轻量级的容器来管理对象的生命周期和相互依赖关系。 - **Spring 体系**:包括Core Container(核心容器)、Data Access/...

    Spring开发指南

    在Spring初探部分,首先涉及到的是准备工作,包括安装必要的开发环境和配置工具,为构建Spring基础代码做准备。接下来,指南会介绍Spring的基础语义,特别是依赖注入(Dependency Injection,简称DI)的概念及其在...

    spring中文教程

    #### Spring初探与准备工作 Spring框架的核心在于其独特的依赖注入(DI)机制。DI允许开发者将组件之间的依赖关系外部化,从而实现组件间的解耦合,使得代码更加模块化和可测试。为了开始使用Spring,首先需要准备...

    cloud-demo第一次 SpringCloud服务拆分初探与案例解析

    SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第一次 SpringCloud服务拆分初探与案例解析 cloud-demo第...

    spring 课件下载

    1. **Spring初探** 在这一章中,我们将从Spring框架的基础出发,介绍其诞生背景和主要目标。我们会讲解Spring如何简化Java应用的开发,以及它提供的依赖注入(Dependency Injection, DI)机制,这是Spring的核心...

    Spring 开发指南

    #### Spring初探:基础知识与构建环境 ##### 准备工作 在着手Spring Framework的开发之前,开发者需要搭建好必要的开发环境。这包括但不限于安装Java开发工具包(JDK),配置开发环境(如IDEA或Eclipse),并确保具备...

    spring 開發指南

    #### Spring初探:框架入门 - **准备工作**:在开始使用Spring框架之前,需要进行一系列的准备工作,包括环境搭建、框架下载和配置。Spring框架通常通过Maven或Gradle等构建工具进行管理,确保项目能够顺利地集成...

    Spring开发手册

    #### Spring初探 Spring框架的核心优势在于其对Java EE复杂性的简化处理,通过提供一系列的模块,如核心容器、数据访问/集成、Web、AOP、测试等,使得开发者能够专注于业务逻辑而非框架细节。本节将带领读者了解...

    Spring经典资料

    ##### Spring初探 - **准备工作**:在深入研究Spring之前,作者建议先进行一系列的准备活动,包括环境搭建、工具配置等,确保开发者能够顺利地运行和测试Spring相关的代码示例。 - **构建Spring基础代码**:这一...

    2011 经典 下载 spring中文教程(spring开发指南).pdf

    Spring初探.......................................................................................................................5 准备工作...............................................................

Global site tag (gtag.js) - Google Analytics