副标题#e#
上次的博文中 深入浅出Spring(二) IoC详解 和 深入浅出Spring(三) AOP详解中,我们别离先容了一下Spring框架的两个焦点一个是IoC,一个是AOP。接下来我们来做一个Spring的实例。
为了更好的讲授Spring的相关内容,这次的博文会针对一个【添加用户】的实例,举办慢慢的剖解和优化,再此进程中,细节内容各人不需要思量,只需要加深对Spring的领略即可。
1、实例一
首先,我们来看一个没有利用任何Spring框架内容,较量纯真的添加用户的实例。先看一下相关的类图和实现代码,详细如下:
public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } public interface UserDao { public void addUser(User user); } public class UserDao4OracleImpl implements UserDao { @Override public void addUser(User user) { System.out.println("UserDao4OracleImpl.addUser() , username="+user.getUsername()); } } public class UserDao4MySqlImpl implements UserDao { @Override public void addUser(User user) { System.out.println("UserDao4MySqlImpl.addUser() , username="+user.getUsername()); } } public interface UserManager { public void addUser(User user); } public class UserManagerImpl implements UserManager { @Override public void addUser(User user) { UserDao userDao = new UserDao4MySqlImpl(); userDao.addUser(user); } } public class Client { public static void main(String[] args) { User user = new User(); user.setUsername("张三"); user.setPassword("123456"); UserManager userManager = new UserManagerImpl(); userManager.addUser(user); } }
阐明上面的类图和代码中,我们可以很明明的看出:在UserManagerImpl类的要领addUser中,UserManagerImpl挪用了UserDao及其详细的实现类UserDao4MySqlImpl,这就不切合IoC模式中,将接口的详细实现类的节制权从挪用类中疏散转交给第三方抉择的相关思想,所以我们需要在这里举办修改。(参考我们之前的IoC文章)。
URL:http://www.bianceng.cn/Programming/Java/201410/45838.htm
#p#副标题#e#
2、实例二
针对实例一中不切合IoC思想的部门,我们举办相关修改,详细修改之后的相关类图和代码如下:
public class UserManagerImpl implements UserManager { private UserDao userDao; public UserManagerImpl (UserDao userDao){ this.UserDao = userDao; } @Override public void addUser(User user) { this.userDao.addUser(user); } } public class Client { public static void main(String[] args) { User user = new User(); user.setUsername("张三"); user.setPassword("123456"); UserDao userDao = new UserDao4MySqlImpl(); UserManager userManager = new UserManagerImpl(userDao); userManager.addUser(user); } }
阐明上面修改之后的类图和代码,我们发明,固然我们将UserDao的节制权交给了Client,但在Client中却存在对UserDao及其相关实现类的依赖,这样对付Client来讲,Client类与UserDao类之间的耦合性反而不如我们之前写的代码低。如何优化呢?我们这里就不做太多的思考,直接利用Spring的相关内容即可。
3、实例三
对付实例二的问题,先来看一下我们利用Spring框架修改之后的相关类图,详细如下:
URL:http://www.bianceng.cn/Programming/Java/201410/45838.htm
看完上面类图之后,我们比拟于第一张类图,可以看出:类与类之间的彼此依赖更少,这样的布局可以或许使我们的代码耦合性更低。但这张类图的代码毕竟是如何实现的呢?接下来,重点看一下我们需要修改的方针Client类的相关代码,详细如下:
public class Client { public static void main(String[] args) { User user = new User(); user.setUsername("张三"); user.setPassword("123456"); BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser(user); } }
#p#分页标题#e#
通过比拟上面的代码和我们第二个实例中关于Client类的代码可以看出,上面的代码用到了一个BeanFactory类和XML文件,这就是Spring框架利用的焦点类和实现方法。相识了两者的区别,我们再看一下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="userDao4MySqlImpl" class="com.zs.spring.dao.UserDao4MySqlImpl" /> <bean id="userManager" class="com.zs.spring.manager.UserManagerImpl"> <property name="userDao" ref="userDao4MySqlImpl" /> </bean> </beans>
关于这个XML文件,我会在接下来的文章中重点举办讲授,这里只汇报各人,它的浸染就是将工具之间的依赖干系交由Spring容器举办节制,制止硬编码所造成的太过措施耦合。即相当于下面的两句代码:
UserManager userManager = new UserManagerImpl(userDao); UserDao userDao = new UserDao4MySqlImpl();
4、总结
比拟上面的三张类图,我们可以看到,利用Spring框架, 将工具之间的依赖干系交由Spring容器举办节制,通过利用XML文件将工具之间的挪用干系从代码中疏散,制止硬编码所造成的太过措施耦合,这正是Spring框架实现解耦的焦点思想。
到此为止,关于Spring的实例就讲授完毕了,讲授的不是很细,各人只需要对Spring框架有一个劈头的认识即可。至于Spring运行进程中的详细实现,我会在下次的博文中继承讲授,以便加深各人对Spring的领略。
给各人提供一个博文配套的参考实例代码下载地点:
spring_01.zip:
http://download.csdn.net/detail/zs15932616453/6013995
出处:http://www.cnblogs.com/zs234/