最近在对Spring进行研究,Spring是一个轻量级的容器框架,对于Spring的基本定位就是"可有可无",如何进行解释呢,比如对于SSH框架来说,Spring的出现就是为了辅助Hibernate和Struts2更好的发挥其作用,对于其特性我们稍后再进行介绍,本次我们只是通过一个简单的demo来分析一下,既然"可有可无",为何我们还要使用呢?
对于项目,我们只需要建立一个Java项目来描述我们想要过程即可,他和Web并没有什么关系。我们通过分层来表述想要的思想,通过建立两个数据库,来实现客户端的调用。
通过Clinet调用服务端,通过服务端调用实现层。Client->Manager->Dao简单的一个过程,我们实现的就是使用Mysql或者Oracle来完成客户端的调用,数据库之间转换的一个过程。
Client端代码:
public class Client { public static void main(String[] args) { // 由我们的应用程序负责服务(对象)定位 UserManager userManager = new UserManagerImpl(); // 直接对添加方法赋值 userManager.addUser("张三", "123"); } }Manager实现类和接口类:
public class UserManagerImpl implements UserManager { public void addUser(String username, String password) { // 由我们的应用程序负责服务(对象)定位 // UserDao userDao=new UserDao4MySqlImpl(); UserDao userDao = new UserDao4OracleImpl(); userDao.addUser(username, password); } }
public interface UserManager { // 接口,从实现获取具体信息 public void addUser(String username, String password); }D层接口和两个实现类:
public interface UserDao { // 添加用户的方法 public void addUser(String username, String password); }
public class UserDao4MySqlImpl implements UserDao { // Mysql的一个测试实现 public void addUser(String username, String password) { System.out.println("UserDao4MySqlImpl.addUser()"); } }
public class UserDao4OracleImpl implements UserDao { // Oracle的测试实现 public void addUser(String username, String password) { System.out.println("UserDao4OracleImpl.addUser()"); } }
简单的三层方法,如果我们想将Mysql更换成Oracle,就必须修改Manager实现层的调用,才能满足需求。庆幸的是我们是基于接口编程的,我们随时可以更换实现方法。
通过上部分代码我们可以分析道,我需要使用什么数据库,都是需要穷主观上去控制的,比如我使用Mysql,那么我就必须要手动修改Manager来更换。那么该如何避免更改代码,且减轻“自己”的负担呢?通过Spring则可以达到我们想要的需求。
我们只需要把对象以及对象之间的依赖关系全权交给Spring即可。它负责查对象,然后再注入给你,这就是IOC容器的依赖注入的过程,所有的过程都依赖反正SPring来给你负责,你只负责最终结果就好。
<?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="userDao4Mysql" class="com.bjpowernode.spring.dao.UserDao4MySqlImpl"></bean> <bean id="userDao4Oracle" class="com.bjpowernode.spring.dao.UserDao4OracleImpl"></bean> <bean id="userManager" class="cpm.bjpowernode.spring.manager.UserManagerImpl"> <!-- 构造函数作用 --> <!-- <constructor-arg ref="userDao4Mysql" /> --> <constructor-arg ref="userDao4Oracle" /> </bean> </beans>
public class UserManagerImpl implements UserManager { // 定义成员变量 private UserDao userDao; // 生成构造方法赋值 public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } public void addUser(String username, String password) { userDao.addUser(username, password); } }
public static void main(String[] args) { /* 通过BeanFactory来自动解析我们的配置文件 */ BeanFactory factory = new ClassPathXmlApplicationContext( "applicationContext.xml"); /* 通过getBean来获取对象 */ UserManager userManager = (UserManager) factory.getBean("userManager"); userManager.addUser("张三", "123"); }温馨提示:记得将Jar包引入咱们的项目中 啊,之前的一步只是将我们需要的三个jar包存入了一个自定义的包内,剩下的就是引入我们的项目中了,右键项目->properties->Java Build Path
最后我们来分析一下,使用Spring优势体现在哪里?