Spring核心概念

Spring 核心概念

在这里插入图片描述

企业级应用开发

在学习Spring前,首先让我们了解一下企业级应用。企业级应用是指为那些商业组织,大型企业创建并部署的解决方案及应用。这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集,数据规模大,用户数量多,有较强的安全性考虑和较高的性能要求。
当代的企业级应用绝不可能是一个个的独立系统。 在企业中.一般都会部署 多个进行交互的应用.同时这些应用又都有可能与其他企业的相关应用连接.从而构成一个结构复杂的、跨越Internet分布式企业应用集群。
此外.作为企业级应用.不但要有强大的功能,还要 能够满足未来业务需求的变化.易于扩展和维护。
传统Java EE解决企业级应用问题时的“重量级” 架构体系,使它的开发效率、开发难度和实际的性能都令人失望。正在人们苦苦寻找解决办法的时候, Spring 以一个” 救世主”的形象出现在广大
的Java程序员面前。
说到Spring.就得提到它的作者Rod Johnson, 2002年他编写了《Expert One-on-One Java EE设计与开发》一书。在书中.他对传统的Java EE技术日益臃肿和低效提出了质疑,他觉得应该有更便捷的做法,于是提出了Interface 21.也就是Spring框架的雏形。他提出了技术以实用为准的主张.引发了人们对“ 正统”JavaEE 的反思。2003 年2月. Spring 框架正式成为- -个开源项目,并发布于SourceForge 中。
Spring致力于Java E应用的各种解决方案,而不是仅仅专注于某一 层的方案。可以说. Spring是企业应用开发的“一站式”选择, Spring 贯穿表现层、业务层、 持久层。 然而,Spring 并不想取代那些已有的框架.而是以高度的开放性与它们无缝整合。
在这里插入图片描述

Spring的“绿草丛”

Spring确实给人一种格外清新.爽朗的感觉,仿佛微雨后的绿草丛,讨人喜欢,又蕴藏着勃勃生。spring是一 个轻量级框架,它大大简化了Java企业级开发,提供了强大、 稳定的功能,又没有带来额外的负担,让人们在使用它做每件事情的时候都有得体和优雅的感觉。Spring 有两个主要目标: 一是让现有技术更易于使用,二是促进良好的编程习惯(或者称为最佳实践)。
Spring是一个全面的解决方案,但它坚持一 个原则: 不重新发明轮子。已经有较好解决方案的领域. Spring绝不做重复性的实现。例如,对象持久化和ORM, Spring 只是对现有的JDBC. MyBatis.
Hibernate等技术提供支持,使之更易用.而不是重新做一个实现。
Spring框架由大约20个功能模块组成。这些模块被分成六个部分,分别是Core Container. Data
Access/Integration. Web. AOP (Aspect Oriented Programming). Instrumentation 及Test, 如图5 .1所示。
Spring Core 是框架的最基础部分,提供了loC特性。Spring Context为企业级开发提供了便利和集
成的工具。SpringAOP是基于Spring Core的符合规范的面向切面编程的实现。Spring JDBC提供了JDBC的抽象层,简化了JDBC编码,同时使代码更健壮。Spring ORM对市面上流行的ORM框架提供了支持。Spring Web为Spring在Web应用程序中的使用提供了支持。关于Spring的其他功能模块在开发中的作用,可以查阅Spring的文档进行了解,这里不再赘述。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spring的优点

  1. 低侵入试设计
  2. 独立于各种应用服务器
  3. 依赖注入特性将组件关系透明化,降低了耦合度
  4. 面向切面编程特性允许将通用任务进行集中式处理
  5. 与第三方框架的良好整合

控制翻转/依赖注入

控制反转(Inversion of Control, loC).也称为依赖注入(Dependency Injection,Dl),是面向对象编程中的一种设计理念.用来降低程序代码之间的耦合度。
首先考虑什么是依赖。依赖,在代码中一般指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系。例如,在A类的方法中,实例化了B类的对象并调用其方法以完成特定的功能,我们就说A类依赖于B类。
几乎所有的应用都是由两个或更多的类通过彼此合作来实现完整的功能。类与类之间的依赖关
系增加了程序开发的复杂程度,我们在开发一个类的时候, 还要考虑对正在使用该类的其他类的影响。

在这里插入图片描述
第一步先定义用户DAO接口,定义所需的持久化方法

/**
 * 用户DAO接口,定义了所需的持久化方法
 *
 */
public interface UserDao {
	/**
	 * 保存用户信息的方法
	 */
	public void save(User user);
}

第二步:用户DAO实现类,实现对User类的持久化操作

/**
 * 用户DAO实现类,实现对User类的持久化操作
 *
 */
public class UserDaoImpl implements userDao {
	/**
	 * 保存用户信息的方法
	 */
	public void save(User user) {
		//这里并未实现完整的数据库操作,仅为说明问题
		System.out.println("保存用户信息到数据库");
	}
}

如上代码所示,UserServiceImpl对UserDaoImpl存在依赖关系。这样的代码很常见,但是存在一个严重的问题,既UserServiceImpl和UserDaoImpl高度耦合,如果因为需求变化需要替换UserDao的 实现类,将导致UserServiceImpl中的代码随之发生修改。如此,程序将不具备优良的可扩展性和可维护性,甚至在开发中难以测试。
我们可以利用简单工厂和工厂方法模式的思路解决此类问题。

/**
 * 增加用户DAO工厂,负责用户DAO实例的创建工作
 *
 */
public class UserDaoFactory {
	//负责创建DAO实例方法
	public static UserDao getInstance() {
		
	}
}

/**
 * 用户业务类,实现对User功能的业务管理
 *
 */
public class UserServiceImpl implements UserService {
	private userDao dao=UserDaoFactory.getInstance();
	public void addNewUser(User user) {
		//调用用户DAO的方法保存用户信息
		dao.save(user);
	}
}

这里的用户DAO工厂类UserDaoFactory体现了“控制反转” 的思想: UserServicelmpl 不再依靠自身的代码去获得所依赖的具体DAO对象,而是把这一工作转交给了‘第三方” 一 一JserDaoFactory,从而避免了和具体UserDao实现类之间的耦合。由此可见,在如何获取所依赖的对象这件事,”控 制权”发生了“反转’从UserServicelmpl 转移到了UserDaoFactory, 这就是所谓的‘ 控制反转”。
问题虽然得到了解决, 但是大量的工厂类会被引入开发过程中,明显增加了开发的工作量,而
Spring能够替我们分担这些额外的工作,为 我们提供完整的loC 实现,让我们得以专注于业务类和DAO类的设计

面向切面编程(AOP)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

怎么使用AOP

实现步骤

  1. 在项目中添加Spring AOP的jar文件
  2. 编写前置增强和后置增强实现日志功能
  3. 编写Spring配置文件,对业务方法进行增强处理
  4. 编写代码获取带有增强处理的业务对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值