spring简介
来源:互联网 发布:淘宝卖家如何分销 编辑:程序博客网 时间:2024/05/21 09:49
spring是一个开源的控制反转(Inversion of Control,IOC)和面向切面(AOP)的容器框架,它的主要目的是简化企业开发。
spring框架的优点:
- 轻量级 的容器框架,没有侵入性
- IOC更加容易组合对象之间的关系,通过面向接口进行编程,可以低耦合开发。
- 易于本地测试(Junit单元测试,不用部署服务器)
- AOP可以更加容易的进行功能扩展,遵循OCP开发原则。
- Spring默认对象的创建为单例的,我们不需要再使用单例的设计模式来开发单体类。
- Spring的集成很强大,另外可以对其他框架的配置进行一元化管理
- Spring的声明式事务的方便使用
Spring主要内容
从下向上看Spring的主要内容
(1)Test:Spring支持Junit单元测试
(2)核心容器(Core Container):
Beans:Bean工厂,创建对象
Core:核心工具类
Context:运行时spring容器,上下文
SpEL:Spring的表达式语言
(3)AOP
AOP:基于代理的AOP支持
Aspects:基于AspectJ的AOP支持
(4)消息(Message)
Message:对消息架构和协议的支持
(5)Web
Web:提供基础的Web集成的功能,在Web项目中提供Spring的容器
Webmvc:提供基于Servlet的Spring MVC
WebSocket:提供WebSocket功能
Webmvc-Portlet:提供Portlet环境支持
(6)数据访问/集成(Data Access/Integration)
JDBC:提供以JDBC访问数据库的支持
Transactions:提供编程式和声明式的事务支持
ORM:提供对对象/关系映射技术的支持
OXM:提供对对象/xml映射技术的支持
JMS:提供对JMS的支持
下面我们通过示例来简单理解下IOC(控制反转)思想
1、定义DAO接口UserDao
public interface UserDao {public void getUser();}2、定义DAO接口实现类UserDaoImpl和UserDaoOracleImpl
UserDaoImpl:
public class UserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("获取用户数据");}}UserDaoOracleImpl:
public class UserDaoOracleImpl implements UserDao{@Overridepublic void getUser() {System.out.println("Oracle获取用户数据");}}3、定义Service层接口UserService,实现具体业务
public interface UserService {public void getUser();}4、定义Service接口的实现类UserServiceImpl,Service层的业务实现,具体要调用到已定义的Dao层接口
我们传统的Java SE设计思想,代码是这样组织的:我们直接在对象内部(应用程序本身)通过new进行创建对象,是程序主动去创建依赖对象
public class UserServiceImpl implements UserService{private UserDao userDao=new UserDaoImpl();@Overridepublic void getUser() {userDao.getUser();}}在我们的测试类Test中
public class Test {public static void main(String[] args) {UserServiceImpl userService=new UserServiceImpl();userService.getUser();}}如果需要替换DAO接口的具体实现类的时候,我们需要将UserServiceImpl中的
private UserDao userDao=new UserDaoImpl();
修改为:
private UserDao userDao=new UserDaoOracleImpl();控制反转(IOC)的设计思想,我们不需要应用程序本身来创建对象,而是将创建对象的任务交付给IOC容器:此时,我们在UserServiceImpl可以这样编写代码
public class UserServiceImpl implements UserService{//private UserDao userDao=new UserDaoOracleImpl();private UserDao userDao=null;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic void getUser() {userDao.getUser();}}
添加一个set方法,当调用端需要创建对象的时候,创建具体实体类的对象,此时我们在Test类中就可以这样组织代码:
public class Test {public static void main(String[] args) {UserServiceImpl userService=new UserServiceImpl();userService.setUserDao(new UserDaoImpl());userService.getUser();System.out.println("--------");userService.setUserDao(new UserDaoOracleImpl());userService.getUser();}}
Test测试类运行结果:
获取用户数据--------Oracle获取用户数据示例总结:
1)对象由原来程序本身创建,变为了程序接收对象
2)程序员主要精力集中与业务的实现
3)实现了service和dao的解耦工作,没有直接依赖关系,层与层之间实现了分离(service和Dao没有关系,完全分离)
4)如果dao的实现发生变化,应用程序本身不用改变(更改Spring的配置文件)
- Spring简介
- Spring简介
- Spring简介
- Spring 简介
- Spring简介
- Spring简介
- Spring 简介
- Spring简介
- Spring简介
- spring 简介
- Spring简介
- Spring简介
- spring简介
- Spring简介
- Spring简介
- Spring简介
- Spring简介
- Spring简介
- 怎样在Transformer+文档保护中使用数字签名
- 测试
- Oracle 数据库的事务隔离级别
- SE
- lintcode:二叉树的中序遍历 递归,迭代,Morris
- spring简介
- Angular2 模版表单
- 使用memory_profiler 与 cProfile ,line_profiler 优化Python程序运行时间和内存消耗实例
- Tomcat下log4j设置文件路径和temp目录
- JAVA表达式的转型规则
- 对《关于下载频道的一系列迷雾》的质疑
- OkHttp + Retrofit 拦截器 拼装参数拦截器 日志输出拦截器
- iOS 贪吃蛇单机版的实现
- Angular2 响应时模版