Spring简介
来源:互联网 发布:西门淘宝店网址 编辑:程序博客网 时间:2024/06/06 19:08
Spring 春天 给软件行业带来了春天
理念:使现有技术更加实用。本身是个大杂烩,整合现有的框架技术。
Spring的优点:
- 本身是个轻量级框架
- IOC容器——控制反转 核心
- AOP——面向切面编程 核心
- 对事务的支持
- 对框架的支持
主要内容:
Spring的核心就是IOC容器(图中第三层Core Container 核心容器)和AOP
IOC:inversion of control 控制反转 一种解耦的思想
下面举个例子进行对比来了解这个思想
以前的方式:
UserDao层:
package cn.sxt.dao;public interface UserDao { public void getUser();}
package cn.sxt.dao.impl;import cn.sxt.dao.UserDao;public class UserDaoMysqlImpl implements UserDao{ @Override public void getUser() { System.out.println("Mysql获取用户数据"); }}
package cn.sxt.dao.impl;import cn.sxt.dao.UserDao;public class UserDaoOracleImpl implements UserDao{ @Override public void getUser() { System.out.println("Oracle获取数据"); }}
service层
package cn.sxt.service;public interface UserService { public void getUser();}
package cn.sxt.service.impl;import cn.sxt.dao.UserDao;import cn.sxt.dao.impl.UserDaoMysqlImpl;import cn.sxt.service.UserService;public class UserServiceImpl implements UserService{ private UserDao userDao=new UserDaoMysqlImpl(); @Override public void getUser() { userDao.getUser(); }}
这个是我们以前的方式,我们自己创建对象,service层里面
private UserDao userDao=new UserDaoMysqlImpl();
这就带来了一个坏处,比如随着业务量的增大,我们要把Mysql换成Oracle,那么所有用到Mysql的地方都要换成Oracle,那就完了,这种设计的耦合性太高了。我们用面向接口编程的目的就是为了降低耦合性,而这将我们的目的跑偏了。
那怎么改呢?
service层修改
package cn.sxt.service.impl;import cn.sxt.dao.UserDao;import cn.sxt.dao.impl.UserDaoMysqlImpl;import cn.sxt.service.UserService;public class UserServiceImpl implements UserService{ private UserDao userDao=null; public void setUserDao(UserDao userDao){ this.userDao=userDao; } @Override public void getUser() { userDao.getUser(); }}
测试
package cn.sxt.test;import cn.sxt.dao.impl.UserDaoMysqlImpl;import cn.sxt.dao.impl.UserDaoOracleImpl;import cn.sxt.service.impl.UserServiceImpl;public class Test { public static void main(String[] args) { UserServiceImpl userService=new UserServiceImpl(); userService.setUserDao(new UserDaoMysqlImpl()); userService.getUser(); System.out.println("----------------------"); userService.setUserDao(new UserDaoOracleImpl()); userService.getUser(); }}
改过以后看上去还是自己创建对象,但是其实已经发生了根本性的变化,
原来是应用程序来创建对象,现在是给客户端来创建,不用修改源码。这种方法是我们手动new放进去,那么有没有一种方法让程序自己本身创建对象放进去。比如Struts2那个Action客户端并没有创建,是Struts2本身为我们创建的。同样的道理,这里我们也是创建对象,我 们有没有办法把它封装到一个配置文件,我们通过读取这个配置文件创建对象。这就完成了一件伟大的事情,原来对象是应用程序本身来创建的,现在应用程序根本不需要管具体实现,哪个对象我们也不需要管,对象外面去给他,在合适的时机给一个对象就ok了,对象怎么创建也不用管,程序员不用再关心具体的对象,可以更关注业务。修改后的案例其实就是IOC的原型。
优点:
- 对象的创建不用应用程序本身来创建,应用程序本身原来是主动去创建对象,现在是被动地接受这个对象
- 程序员主要的精力集中于业务的实现
- 实现了Dao层和Service层的解耦。Service层和Dao层实现了分离。没有直接依赖关系,通过上面修改前的案例可以看出,Service需要导入Dao层的类,所以存在依赖关系。
- 如果Dao的实现发生改变,应用程序本身不用改变。
阅读全文
0 0
- Spring简介
- Spring简介
- Spring简介
- Spring 简介
- Spring简介
- Spring简介
- Spring 简介
- Spring简介
- Spring简介
- spring 简介
- Spring简介
- Spring简介
- spring简介
- Spring简介
- Spring简介
- Spring简介
- Spring简介
- Spring简介
- Insertion Sort(插入排序)
- 黑盒测试方法一
- PCRE兼容正则表达式函数
- 并发编程中同步锁的分类及性质(以Java为例)
- Split参数StringSplitOptions.RemoveEmptyEntries的使用
- Spring简介
- 继承
- 结构体_结构体指针,tyepdef_union_enum
- Wine trading in Gergovia UVA
- CentOS6.9下MySQL5.6编译安装
- Ajax的原理和应用
- django建站实录
- Android Studio自动检查代码规范并提示如何优化的一些插件
- 多层感知机(multi-layer perceptron)实现手写体分类(TensorFlow)