spring实战——1、spring之旅

什么是spring?(由Rod Johnson创建的一个开源框架)

Spring是一个开放源代码的设计层面框架,他解决的是 业务逻辑层和其他各层的松耦合问题 ,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。 简单来说,Spring是一个分层的JavaSE/EE full-stack( 一站式) 轻量级 开源框架。
轻量级:与EJB对比,依赖资源少,消耗的资源少
分层:一站式,每一层都提供了解决方案
            web层:Struts,spring MVC
           service层:spring
            dao层:hibernate、mybatis、jdbcTemplate   ——>spring - data(后期了解)

EJB: EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。在EJB3.0推出以后,实体Bean被单独分了出来,形成了新的规范JPA

创建spring的主要目的是用来替代更加重量级的企业级Java技术(如EJB等),相对于EJB来说,spring提供了更加轻量级和简单的编程模型。它强了简单老式Java对象(Plain Old Java object, POJO)的功能,使其具备了之前只有EJB和其他企业级Java规范才具有的功能。

spring的核心

spring的核心是控制反转(IOC)和面向切面(AOP)

1.1spring的目的是简化Java开发

spring的四种简化Java开发的策略:

1、基于POJO的轻量级和最小侵入性编程;(程序员面向POJO 编程)

2、通过依赖注入和面向接口实现松耦合;(降低代码复杂性、降低耦合度)

3、基于切面和管理进行声明式编程;(比如需要使用xml方式或Java方式配置spring)

4、通过切面和模板代码减少样板式代码;(比如 jdbctemplete封装访问数据库的固定样式代码)

1.1.1激发POJO 的潜能(使得原本的Java普通类变得不只是简单的类,它还可以有其他用处)

通过框架学习我们发现很多框架通过强迫应用继承或实现他们的一个类或接口从而使得框架和应用绑定,这样使得框架和应用的耦合度较高,(比如应用需要换另一个框架实现时,在代码层面上就得做修改)。spring则立志于避免自身框架的API与应用的耦合度较高问题。spring不会强迫应用继承或实现spring的类或接口,相反,在基于spring构建的应用中,在其代码层面(类)没有任何痕迹表明我使用了spring,最坏的场景即使用注解。

1.1.2依赖注入(DI)


创建应用组件之间的写作的行为通常称为装配。spring有多种装配bean的方式,如xml方式、Java方式。(这里即是我们程序中使用的配置文件,用配置文件来表述Javabean之间的依赖关系)。

1.1.3应用切面(AOP)

DI能够让相互协作的软件组件保持松散耦合,而面向切面编程(aspect-oriented programming,AOP)允许你把遍布应用各处的功能分离出来重新组成可重用的组件。面向切面编程中,系统由许多不同的组件组成,每一个组件各负责一个特定功能,这些组件除了实现自身的功能外,还经常承担着额外的职责,如日志、事务管理、安全等服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常称为横切关注点,因为他们会跨越系统的多个组件。

如果将这些关注点分散到多个组件中去,你的代码将会带来双重的复杂性。

a、实现系统关注点功能的代码将会重复出现在多个组件中;

b、组件会因为那些与自身核心业务无关的代码而变得混乱;

如下图所示,展示了这种实现方式的复杂性:


分析:各模块本来只需要关注自己的核心功能即可,现在几乎每个模块都需要关注日志、安全、事务等功能的实现,代码的运行效率必然是极低的。

AOP能够使这些服务模块化,并以声明的方式将他们应用到他们需要影响的组件中。所造成的结果就是这些组件会具有更高的内聚性并且会更加专注于自身的业务,完全不需要了解设计系统服务所带来的复杂性。如下图所示,我们可以把切面想象为覆盖在很多组件之上的一个外壳。应用由各模块组成。借助AOP,可以使用各种功能层去包裹核心业务层。这些层以声明的方式灵活的应用到系统中,你的核心应用甚至根本不知道他们的存在。这是一个非常强大的理念,可以将安全、事务、日志关注点与核心业务逻辑分离。



1.2容纳应用的bean

容器:容器是spring框架的核心。spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。

spring的两个容器:BeanFactory、ApplicationContext

1、BeanFactory:这是一个工厂,用于生产任意bean。 采取延迟加载,第一次getBean的时候才会初始化bean。
2、ApplicationContext:是BeanFactory的子接口,功能更强大。 当配置文件被加载,进行实例化

1.2.1使用应用上下文

ClassPathXmlApplicationContext用于加载classpath(类路径-运行状态、src-开发状态、包含jar文件)下的指定的xml文件
FileSystemXmlApplicationContext:用于加载指定盘符下的xml文件

AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载spring应用上下文。

AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载spring Web应用上下文。

XmlWebApplicationContext:从Web应用下的一个或多个xml配置文件中加载spring应用上下文。

1.2.2bean的生命周期


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值