java 中什么叫容器环境?java什么叫类属性 实例属性 以及区别
很多朋友对于java 中什么叫容器环境和java什么叫类属性 实例属性 以及区别不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
java什么叫类属性 实例属性 以及区别
-E,呵呵,你还是没听错,给你个百科的J2EE标准说明,看看你就明白了:记得给分哦~~
网址如下
J2EE简介
J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition)
J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。
一、J2EE的概念
目前,Java 2平台有3个版本,它们是适用于小型设备和智能卡的Java 2平台Micro
版(Java 2 Platform Micro Edition,J2ME)、适用于桌面系统的Java 2平台标准版(
Java 2 Platform Standard Edition,J2SE)、适用于创建服务器应用程序和服务的Jav
a 2平台企业版(Java 2 Platform Enterprise Edition,J2EE)。
J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问
题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩
固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC
API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对
EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及X
ML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间
的体系结构。
J2体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠
性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的
费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise
JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高
了性能。
二. J2EE的优势
J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:
1.保留现存的IT资产:由于企业必须适应新的商业需求,利用已有的企业信息系
统方面的投资,而不是重新制定全盘方案就变得很重要。这样,一个以渐进的(而不是
激进的,全盘否定的)方式建立在已有系统之上的服务器端平台机制是公司所需求的。J
2EE架构可以充分利用用户原有的投资,如一些公司使用的BEA Tuxedo、IBM CICS,
IBM Encina,、Inprise VisiBroker以及Netscape Application Server。这之所以成为
可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一
个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径
。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系
统和硬件也能被保留使用。
2.高效的开发: J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供
应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时
间。高级中间件供应商提供以下这些复杂的中间件服务:
o状态管理服务--让开发人员写更少的代码,不用关心如何管理状态,
这样能够更快地完成程序开发。
o持续性服务--让开发人员不用对数据访问逻辑进行编码就能编写应用
程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
o分布式共享数据对象CACHE服务--让开发人员编制高性能的系统,极大
提高整体部署的伸缩性。
3.支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应
用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需
开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标
准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省
了由自己制订整个方案所需的费用。
4.可伸缩性:企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸
缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可
被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统,这种系统单机可支
持64至256个处理器。(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛
的负载平衡策略。能消除系统中的瓶颈,允许多台服务器集成部署。这种部署可达数千
个处理器,实现可高度伸缩的系统,满足未来商业应用的需要。
稳定的可用性:一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要
。因为INTERNET是全球化的、无处不在的,即使在夜间按计划停机也可能造成严重损失
。若是意外停机,那会有灾难性后果。J2EE部署到可靠的操作环境中,他们支持长期的
可用性。一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如Sun
Solaris、IBM OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机
时间。这是实时性很强商业系统理想的选择。
三. J2EE的四层模型
J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据
他们所在的层分布在不同的机器上。事实上,sun设计J2EE的初衷正是为了解决两层模式
(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种
模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经
常基于某种专有的协议??通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非
常困难。现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一
个多层化应用能够为不同的每种服务提供一个独立的层,以下是 J2EE典型的四层结构:
运行在客户端机器上的客户层组件
运行在J2EE服务器上的Web层组件
运行在J2EE服务器上的业务逻辑层组件
运行在EIS服务器上的企业信息系统(Enterprise information system)层软件
J2EE应用程序组件
J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元,它们通过相关
的类和文件组装成J2EE应用程序,并与其他组件交互。J2EE说明书中定义了以下的J2EE
组件:
应用客户端程序和applets是客户层组件.
Java Servlet和JavaServer Pages(JSP)是web层组件.
Enterprise JavaBeans(EJB)是业务层组件.
客户层组件
J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.
web层组件
J2EE web层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML页面和Appl
ets不算是web层组件。
正如下图所示的客户层那样,web层可能包含某些 JavaBean对象来处理用户输入,并把
输入发送给运行在业务层上的enterprise bean来进行处理。
业务层组件
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务
层上的enterprise bean进行处理.下图表明了一个enterprise bean是如何从客户端
程序接收数据,进行处理(如果必要的话),并发送到EIS层储存的,这个过程也可以逆
向进行。
有三种企业级的bean:会话(session) beans,实体(entity) beans,和消息驱动(messa
ge-driven) beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,
会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.
当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.
消息驱动 bean结合了会话bean和 JMS的消息监听器的特性,允许一个业务层组件异步
接收JMS消息.
企业信息系统层
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划
(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.例如,J2EE应用组件可
能为了数据库连接需要访问企业信息系统
四. J2EE的结构
这种基于组件,具有平台无关性的J2EE结构使得J2EE程序的编写十分简单,因为业务
逻辑被封装成可复用的组件,并且J2EE服务器以容器的形式为所有的组件类型提供后台
服务.因为你不用自己开发这种服务,所以你可以集中精力解决手头的业务问题。
容器和服务
容器设置定制了J2EE服务器所提供得内在支持,包括安全,事务管理,JNDI(Java
Naming and Directory Interface)寻址,远程连接等服务,以下列出最重要的几种服务
:
J2EE安全(Security)模型可以让你配置 web组件或enterprise bean,这样只有被授权
的用户才能访问系统资源.每一客户属于一个特别的角色,而每个角色只允许激活特定
的方法。你应在enterprise bean的布置描述中声明角色和可被激活的方法。由于这种声
明性的方法,你不必编写加强安全性的规则。
J2EE事务管理(Transaction Management)模型让你指定组成一个事务中所有方法间的
关系,这样一个事务中的所有方法被当成一个单一的单元.当客户端激活一个enterpris
e bean中的方法,容器介入一管理事务。因有容器管理事务,在enterprise bean中不必
对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述文
件中声明enterprise bean的事务属性,而不用编写并调试复杂的代码。容器将读此文件
并为你处理此enterprise bean的事务。
JNDI寻址(JNDI Lookup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这
样应用程序组件可以访问名字和目录服务.
J2EE远程连接(Remote Client Connectivity)模型管理客户端和enterprise bean间的
低层交互.当一个enterprise bean创建后,一个客户端可以调用它的方法就象它和客户
端位于同一虚拟机上一样.
生存周期管理(Life Cycle Management)模型管理enterprise bean的创建和移除,一个
enterprise bean在其生存周期中将会历经几种状态。容器创建enterprise bean,并在
可用实例池与活动状态中移动他,而最终将其从容器中移除。即使可以调用enterprise
bean的create及remove方法,容器也将会在后台执行这些任务。
数据库连接池(Database Connection Pooling)模型是一个有价值的资源。获取数据库
连接是一项耗时的工作,而且连接数非常有限。容器通过管理连接池来缓和这些问题。e
nterprise bean可从池中迅速获取连接。在bean释放连接之可为其他bean使用。
容器类型
J2EE应用组件可以安装部署到以下几种容器中去:
EJB容器管理所有J2EE应用程序中企业级bean的执行. enterprise bean和它们的容
器运行在J2EE服务器上.
Web容器管理所有J2EE应用程序中JSP页面和Servlet组件的执行. Web组件和它们的容
器运行在J2EE服务器上.
应用程序客户端容器管理所有J2EE应用程序中应用程序客户端组件的执行.应用程序客
户端和它们的容器运行在J2EE服务器上.
Applet容器是运行在客户端机器上的web浏览器和 Java插件的结合.。
五. J2EE的核心API与组件
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基
于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于
篇幅,这里只能进行简单的描述):
1. JDBC(Java Database Connectivity):
JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽
了一些细节问题,另外,JDCB对数据库的访问也具有平台无关性。
2. JNDI(Java Name and Directory Interface):
JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源
如DNS和LDAP,本地文件系统,或应用服务器中的对象。
3. EJB(Enterprise JavaBean):
J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实
施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发
。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的
服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的
是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种
和EJB平行的方式来达到同样的目的。
4. RMI(Remote Method Invoke):
正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端
和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。
5. Java IDL/CORBA:
在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象
并使之可在CORBA ORB中展开,或者他们还可以创建Java类并作为和其它ORB一起展开的C
ORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的
应用和旧的系统相集成。
6. JSP(Java Server Pages):
JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对
这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
7. Java Servlet:
Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用
,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似
,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets
全部由Java写成并且生成HTML。
8. XML(Extensible Markup Language):
XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。
XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过
将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。
9. JMS(Java Message Service):
MS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有
支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的
消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另
一种方式来对您的应用与旧的后台系统相集成。
10. JTA(Java Transaction Architecture):
JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。
11. JTS(Java Transaction Service):
JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理
器是在高层支持Java Transaction API(JTA)规范,并且在较底层实现OMG OTS
specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以
及通信资源管理器提供了事务服务。
12. JavaMail:
JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SM
TP服务器,也支持IMAP服务器。
JAF(JavaBeans Activation Framework):
JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或
者转换自Java对象。大多数应用都可以不需要直接使用JAF。
[编辑本段]J2EE初学者需要注意的问题
体系结构简单介绍
一、J2EE提出的背景
1、企业级应用框架的需求
在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列统称为中间件。
2、为了通用必须要提出规范,不然无法达到通用
在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。
注:中间件的解释中间件处在操作系统和更高一级应用程序之间。它充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力。我们后面说到的容器的概念就是中间件的一种。
二、相关名词解释
容器:充当中间件的角色
WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接与容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
容器:Enterprise java bean容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
RMI/IIOP:远程方法调用internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
JNDI:JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。
JTA:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。
三、J2EE的优越性
1、基于JAVA技术,平台无关性表现突出
2、开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如BEA,IBM,ORACLE等。
3、提供相当专业的通用软件服务。
4、提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础
四、现状
J2EE是由SUN公司开发的一套企业级应用规范。现在最高版本是1.6。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER等。
[编辑本段]J2EE的13种核心技术
为了联系实际,GOULD基于WEBLOGIC应用服务器(来自BEA SYSTEMS公司的一种广为应用的产品)环境来介绍J2EE的这些技术。
JAVA最初是在浏览器和客户端机器中粉墨登场的。当时,很多人质疑它是否适合做服务器端的开发。现在,随着对JAVA2平台企业版(J2EE)第三方支持的增多,JAVA被广泛接纳为开发企业级服务器端解决方案的首选平台之一。
J2EE平台由一整套服务(SERVICES)、应用程序接口(APIS)和协议构成,它对开发基于WEB的多层应用提供了功能支持。在本文中我将解释支撑J2EE的13种核心技术:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVA MAIL和 JAF,同时还将描述在何时、何处需要使用这些技术。当然,我还要介绍这些不同的技术之间是如何交互的。此外,为了让您更好地感受J2EE的真实应用,我将在WEBLOGIC应用服务器(来自BEA SYSTEMS公司的一种广为应用的产品)环境下来介绍这些技术。不论对于WEBLOGIC应用服务器和J2EE的新手,还是那些想了解J2EE能带来什么好处的项目管理者和系统分析员,相信本文一定很有参考价值......
什么是 注入类、宿主类(java)
注入类是被引用的类,宿主类应该是引用注入类的类。一般用XML文件或Annotation调用,ejb3.0是使用这个比较多的框架,用这个就不用传统的jndi了,其实原理是一样的,只是现在的架构给封装好了。好像是叫IOC模式,比较好用,可以省些代码,不过引用的注入类必须是受容器管制类。
java中Spring是什么
1.1.1 Spring是什么
Spring是一个开源的轻量级Java SE(Java标准版本)/Java EE(Java
企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。Spring框架刚出来时主要就是来完成这个功能。
Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java
EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring
MVC、而且还能非常简单的与第三方web框架集成。从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是JAVA
SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。让我们来深入看一下Spring到底能帮我们做些什么?
1.1.2 Spring能帮我们做什么
Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发:
一、传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署;而如果采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可,无需重新编译。所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
二、当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来,那必然存在调用还是存在重复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码;还有日志记录,比如记录一些方法访问日志、数据访问日志等等,这些都会渗透到各个要访问方法中;还有权限控制,必须在方法执行开始进行审核,想想这些是多么可怕而且是多么无聊的工作。如果采用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中;有人可能说了,我们可以使用“代理设计模式”或“包装器设计模式”,你可以使用这些,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring
面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。所以,Spring
面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
三、在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。
四、Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
五、Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
六、Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?当然有,比如EJB需要依赖应用服务器、开发效率低、在开发中小型项目是宰鸡拿牛刀,虽然发展到现在EJB比较好用了,但还是比较笨重还需要依赖应用服务器等。那为何需要使用Spring,而不是其他框架呢?让我们接着往下看。
1.1.3为何需要Spring
一首先阐述几个概念
1、应用程序:是能完成我们所需要功能的成品,比如购物网站、OA系统。
2、框架:是能完成一定功能的半成品,比如我们可以使用框架进行购物网站开发;框架做一部分功能,我们自己做一部分功能,这样应用程序就创建出来了。而且框架规定了你在开发应用程序时的整体架构,提供了一些基础功能,还规定了类和对象的如何创建、如何协作等,从而简化我们开发,让我们专注于业务逻辑开发。
3、非侵入式设计:从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计,如果以后想更换框架之前写过的代码几乎无法重用,如果非侵入式设计则之前写过的代码仍然可以继续使用。
4、轻量级及重量级:轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。
5、POJO:POJO(Plain Old Java
Objects)简单的Java对象,它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。
6、容器:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
7、控制反转:即Inversion of Control,缩写为IoC,控制反转还有一个名字叫做依赖注入(Dependency
Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。
8、Bean:一般指容器管理对象,在Spring中指Spring IoC容器管理对象。
二
为什么需要Spring及Spring的优点
●
非常轻量级的容器:以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序。Spring容器是非侵入式的(不需要依赖任何Spring特定类),而且完全采用POJOs进行开发,使应用程序更容易测试、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依赖任何应用服务器,可以部署在任何环境(Java
SE或Java EE)。
● AOP:AOP是Aspect Oriented
Programming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。
●
简单的数据库事务管理:在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头疼的事,而且很容易出现错误,Spring支持可插入的事务管理支持,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来来专注业务逻辑。
●
JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(数据访问对象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事务和使用Spring提供的一致的异常体系。
●灵活的Web层支持:Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等。
●简化各种技术集成:提供对Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等的集成。
Spring能帮助我们简化应用程序开发,帮助我们创建和组装对象,为我们管理事务,简单的MVC框架,可以把Spring看作是一个超级粘合平台,能把很多技术整合在一起,形成一个整体,使系统结构更优良、性能更出众,从而加速我们程序开发,有如上优点,我们没有理由不考虑使用它。
1.1.4如何学好Spring
要学好Spring,首先要明确Spring是个什么东西,能帮我们做些什么事情,知道了这些然后做个简单的例子,这样就基本知道怎么使用Spring了。Spring核心是IoC容器,所以一定要透彻理解什么是IoC容器,以及如何配置及使用容器,其他所有技术都是基于容器实现的;理解好IoC后,接下来是面向切面编程,首先还是明确概念,基本配置,最后是实现原理,接下来就是数据库事务管理,其实Spring管理事务是通过面向切面编程实现的,所以基础很重要,IoC容器和面向切面编程搞定后,其余都是基于这俩东西的实现,学起来就更加轻松了。要学好Spring不能急,一定要把基础打牢,基础牢固了,这就是磨刀不误砍柴工。
1.2 Spring基础
1.2.1 Spring架构图
图 1-1 Spring架构图
核心容器:包括Core、Beans、Context、EL模块。
●
Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。
●
Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中Bean
Factory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。
● Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java
EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。
●
EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring
容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。
AOP、Aspects模块:
● AOP模块:Spring
AOP模块提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented
programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。
● Aspects模块:提供了对AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。
数据访问/集成模块:该模块包括了JDBC、ORM、OXM、JMS和事务管理。
●
事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事物管理。
●
JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
●
ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事务管理,无需额外控制事务。
●
OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
● JMS模块:用于JMS(Java Messaging Service),提供一套
“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
●
Web/Remoting模块:Web/Remoting模块包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。
● Web模块:提供了基础的web功能。例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web
Service支持,并提供一个RestTemplate类来提供方便的Restful services访问。
●
Web-Servlet模块:提供了一个Spring MVC Web框架实现。Spring
MVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。
●
Web-Struts模块:提供了与Struts无缝集成,Struts1.x和Struts2.x都支持
Test模块:
Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。
1.2.2典型应用场景
Spring可以应用到许多场景,从最简单的标准Java
SE程序到企业级应用程序都能使用Spring来构建。以下介绍几个比较流行的应用场景:
●典型Web应用程序应用场景:
图1-2 web应用程序应用场景
在Web应用程序应用场景中,典型的三层架构:数据模型层实现域对象;数据访问层实现数据访问;逻辑层实现业务逻辑;web层提供页面展示;所有这些层组件都由Spring进行管理,享受到Spring事务管理、AOP等好处,而且请求唯一入口就是DispachterServlet,它通过把请求映射为相应web层组件来实现相应请求功能。
●远程访问应用场景:
Spring能非常方便的提供暴露RMI服务,远程访问服务如Hessian、Burlap等,实现非常简单只需通过在Spring中配置相应的地址及需要暴露的服务即可轻松实现,后边会有介绍;
● EJB应用场景:
Spring也可以与EJB轻松集成,后边会详细介绍。
关于java 中什么叫容器环境的内容到此结束,希望对大家有所帮助。