Spring基础

1. 出现

  Spring是为了解决企业应用程序开发复杂性而创建的一个开源的轻量级的框架。所谓框架,就是针对某组问题的一组解决方案。也就是某组问题用不用框架都可以解决,只不过框架提供了一套较优的解决方案。那么下面就看Spring框架具体解决了开发中的什么问题。


2. 作用

       首先,Spring的主要作用就是“管理对象以及对象之间的依赖关系”:

  Ø  对象包括普通的表现层、业务逻辑层、Dao层等普通的对象,以及session、Transtration、Connection等对象。

  Ø  管理对象,包括对象的查找、定位、创建、注入

  Ø  分层在一定程度上消除了对象之间(横向)的依赖关系,因为同层内部对象之间是不存在交互的;而Spring又进一步地消除(管理)了各层之间对象的依赖关系。之前的U层调B层,B层调D层,UBD层调Model等所有的这些层与层之间的调用关系都被Spring管理了起来。

  Spring 框架是一个分层架构,由 7 个定义良好的模块组成。模块构建在核心容器之上,如下图:

   

       人们常将Spring定义为“Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架”。从上图也可以看出,Spring核心功能的实现主要是靠它的IoC(控制反转)容器来实现,而IoC容器主要使用DI(依赖注入)方式实现。

       轻量——主要指Spring框架是非侵入性的,Spring应用中对象都是POJO对象,也就是说它们不需要依赖容器的API,不需要依赖容器的一些特定类或实现容器的一些特定接口。使用了Spring框架后,想撤掉框架或换另一个框架,都非常容易,直接将Spring的配置去掉,然后继续开发即可。

       IoC(控制反转)——即本来由应用程序管理的对象之间的依赖关系,交给IoC容器来管理。如,之前的各层之间的调用关系是写在程序里的,现在只需将这些关系配置到Spring的核心配置文件(即IoC容器)中即可。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。也可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

       AOP(面向切面编程)——Spring允许通过分离应用的业务逻辑与系统级服务(例如事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不需要关注其它的系统级关注点,例如日志或事务支持。通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。


3. Spring环境配置

       下载spring-framework开发包,并解压,目录结构如下:


  

  添加Spring的依赖包

  Ø  SPRING_HOME/dist/spring.jar

  Ø  SPRING_HOME/lib/log4j/log4j-1.2.14.jar

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

  添加Spring核心配置文件

  可以将Spring提供的任何一个实例程序中的配置文件考过去,然后删掉其中的配置信息,例如:

  spring-framework-2.0\samples\jpetstore\war\WEB-INF\applicationContext.xml


4. 使用实例

  环境已经配置好了,然后通过简单实例体验Spring的作用:

  建一个普通的java工程(Spring不像Struts只能用在Web项目),然后建如下的包-类结构:


  


  源码如下:

  dao

   【interface UserDao】

package com.bjpowernode.spring.dao;

public interface UserDao {
	public void addUser(String username,String password);
}

   【class UserDao4MysqlImpl】

package com.bjpowernode.spring.dao;

public class UserDao4MysqlImpl implements UserDao {
	public void addUser(String username,String password){
		System.out.print("UserDao4MysqlImp-->addUser");
	}
}

   【class UserDao4OracleImpl】

package com.bjpowernode.spring.dao;

public class UserDao4OracleImpl implements UserDao {
	public void addUser(String username,String password){
		System.out.print("UserDao4OracleImpl-->addUser");
	}
}

  manager

   【interface UserManager】

package com.bjpowernode.spring.manager;

public interface UserManager {
	public void addUser(String username,String password);
	
}

   【class UserManagerImpl】

package com.bjpowernode.spring.manager;

import com.bjpowernode.spring.dao.UserDao;
import com.bjpowernode.spring.dao.UserDao4MysqlImpl;
import com.bjpowernode.spring.dao.UserDao4OracleImpl;

public class UserManagerImpl implements UserManager {
	
	private UserDao userDao;
	
	public UserManagerImpl() {
		super();
	}
	//构造方法方式注入
	public UserManagerImpl(UserDao userDao) {
		this.userDao = userDao;
	}
	//setter方式注入
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	@Override
	public void addUser(String username, String password) {
		//原始的方式--由我们的程序负责服务(对象)管理
		//UserDao userDao = new UserDao4MysqlImp();
		//UserDao userDao = new UserDao4OracleImpl();
		userDao.addUser(username, password);
	}
}

  Spring核心配置--applicationContext.xml

   主要是new一个配置好的UserDao的实现(Mysql或Oracle)对象,然后将其注入到UserManager实现的userDao对象中

<?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="UserDao4MysqlImpl" class="com.bjpowernode.spring.dao.UserDao4MysqlImpl"/>
	
	<bean id="UserDao4OracleImpl" class="com.bjpowernode.spring.dao.UserDao4OracleImpl"/>
	
	<bean id ="UserManager" class="com.bjpowernode.spring.manager.UserManagerImpl">
		<!--
		<constructor-arg ref="UserDao4MysqlImpl"/>
		-->
		<!-- 
		<constructor-arg ref="UserDao4OracleImpl"/>
		 -->
		<property name="userDao" ref="UserDao4OracleImpl"/>				
	</bean>
</beans>

  Client

package com.bjpowernode.spring.client;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bjpowernode.spring.dao.UserDao4MysqlImpl;
import com.bjpowernode.spring.manager.UserManager;
import com.bjpowernode.spring.manager.UserManagerImpl;

public class Client {
	public static void main(String[] args) {
		//UserManager userManager = new UserManagerImpl(new UserDao4MysqlImpl());
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserManager userManager = (UserManager)factory.getBean("UserManager");
		userManager.addUser("kobe", "nba");
	}
}


5. 总结

       org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,是IoC容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。Spring容器的作用可用下图表示:就是通过配置来管理原有的POJO对象及其依赖关系来构建一个完全可配置的系统或应用。

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值