Java那些事儿 - JavaOne 2011、CDI和Google Dart语言

对于Java社区来说,9月和10月间最重要的事件是一年一度的JavaOne大会的召开。JavaOne 2011的 主题是“推动Java向前发展(Moving Java Forward)”。从这个主题可以看出,Oracle正试图以领导者的身份带领Java社区来共同推动Java的发展。Java SE 7的发布,是这个过程中的一个重要里程碑。相对于上一次JavaOne会议来说,JavaOne 2011在社区中的评价比较不错,被认为是一次成功的会议。Oracle也更加重视社区在推动Java发展中的作用。遗憾的是,由于Google和Oracle之间的专利诉讼,来自Google的开发者再一次缺席了JavaOne大会。

在JavaOne 2011上,Oracle发布了一些新的技术和项目,也公布了一些重要项目的发展规划。

Java SE 8

根据社区的反馈,Java SE 8的发布时间从2012年底推迟到了2013年夏,距离Java SE 7的发布差不多正好2年的时间。在Java SE 8中会包含的内容包括:

  • Jigsaw项目:为Java平台和Java应用提供模块化系统的支持。
  • Lambda项目:为Java语言增加闭包的支持。为Java集合API提供批量并行操作API,如filter/map/reduce。
  • 把JRockit虚拟机中的部分特性整合到HotSpot虚拟机中,提供一个统一的虚拟机实现。
  • 集成JavaFX 3.0。在JavaOne 2011上JavaFX 2.0正式发布,并会在JDK 7u2中集成JavaFX 2.0的安装。Java SE 8中则会直接集成JavaFX 3.0。
  • 虚拟机上可以直接使用的新的JavaScript引擎,以及更好的JavaScript和Java互操作性。新的JavaScript引擎称为Nashorn,是一个基于JSR 292的实现。
  • 在移动设备上,增加对多点触摸、摄像头、地理位置信息、罗盘和重力加速器的支持
  • 对Java 安全、日期/时间、网络、国际化和可访问性API的更新。

Java EE 7

Java EE 7的目标是把Java EE技术与目前炙手可热的云计算相结合,把Java EE平台本身变成一个服务(Platform as a Service,PaaS),同时提供弹性计算(Elastic computing)和多租户(Multi-tenancy)的支持。相对于目前已有的云计算技术,Java EE 7的最大优势在于标准化和开放性。Java EE 7的内容包括:

  • 提供平台即服务的支持,包括服务定义和服务提供,以及在API中支持多租户。
  • 增强Web Profile的能力,增加对JAX RS 2.0的支持。
  • 进一步简化开发,包括新的JMS 2.0,更多的依赖注入的使用,以及更多的服务元数据和优化配置方式等。

Java ME 7

在Java ME方面,发展的重点是与Java SE保持同步。当Java SE中有新的更新时,尽快的同步到Java ME中。这其中包括发布版本的同步、Java ME API可以运行在Java SE环境中、以及一致的工具接口等。另外的一个目标是让Java平台支持所有不同的平台,不管是什么样的CPU和内存限制环境。最后一个方向是与内容和服 务进行深度集成,包括访问运营商提供的服务。

CDI

对于依赖注入的概念,相信很多开 发人员都不陌生。一个组件在运行过程中会依赖其他组件提供的功能。传统的做法是由组件本身负责查找所需的依赖对象。这种方式会造成组件之间的紧耦合,不利 于组件的维护和更新。依赖注入的做法则是由组件以声明式的方式表明其依赖关系,由框架在运行时把所需的组件的Java对象注入到当前组件中。相对于 Java SE来说,依赖注入的概念对于Java EE更加适用。Java EE中的很多资源和服务都是由容器来负责管理的。对于单个应用来说,查找由容器负责管理的组件并不是一件容易的事情。更好的做法是由应用来声明所需的资源 和服务,由容器负责注入到应用中。通过这种方式,容器也可以更好的对资源和服务进行管理。以数据库连接为例,传统的做法需要由应用本身加载相关驱动并创建 数据库连接,以及在适当的时候进行释放。而使用容器管理并注入依赖的做法,则减轻了应用开发人员的工作量。

Java EE 5中添加了对依赖注入的有限支持。通过注解可以往容器管理的对象中注入资源的对应对象。Java EE 6中把依赖注入的概念更进一步,即引入了JSR 299 (Contexts and Dependency Injection for the Java EE platform)规范,简称CDI。CDI规范吸收了来自Spring IoC容器、JBoss Seam和Google Guice的 最佳实践,并与Java EE开发的实际需要相结合。正如CDI的字面含义一样,CDI中的两个核心功能是上下文信息(context)和依赖注入。这两个功能的结合点是Java 中基本的组件模型bean。在CDI中,bean 定义了应用的状态和逻辑,并由容器来进行管理。每个被管理的bean都有定义好的绑定到特定上下文的作用域和生命周期。当需要注入或访问bean时,容器 会从作用域对应的上下文中获取。当作用域失效时,对应上下文中所有的对象都会被删除。CDI中的每个bean都可以作为依赖注入时的目标。

CDI中预定义了一些常用的作用域。默认的作用域是Dependent,表示只对被注入的对象生效。作用域ApplicationScoped表示 应用的全局作用域,用来创建全局唯一的对象。RequestScoped和SessionScoped则与HTTP相关,分别表示HTTP请求和HTTP 会话。ConversationScoped是由应用自定义生命周期长短的作用域,可以用来实现跨多页面的工作流。如下面代码中的 OrderProcessor类只存活在HTTP请求中,并且依赖OrderDao接口的实现。容器会在运行时查找到OrderDao接口的实现对象,并 注入到OrderProcessor类的对象中。

@Named
@RequestScoped
public class OrderProcessor {
 @Inject
 private OrderDao orderDao;
}

通常的依赖注入方式是在代码中只依赖接口,由容器在运行时选择合适的实现类的对象来进行注入。如果接口只有一个实现类,则不需要额外的声明。如果接 口有不同的实现,则需要使用限定符(qualifier)来声明具体使用的实现,否则容器无法做出正确的选择。CDI的一个特点是限定符不是普通的字符 串,而是类型安全的注解。

通过Qualifier元注解可以创建新的限定符注解。如下面的代码创建了一个新的限定符注解InMemory。

@Qualifier
@Retention(RUNTIME)
@Target({TYPE})
public @interface InMemory {}

该注解可以添加在OrderDao接口的实现上。

@InMemory
    public class InMemoryOrderDao implements OrderDao {
}

如果在测试时,希望使用简单的基于内存的存储实现,可以使用InMemory注解来声明。这样容器在注入时会使用InMemoryOrderDao类的对象。

@Named
@RequestScoped
public class OrderProcessor {
 @Inject @InMemory
 private OrderDao orderDao;
}

使用类型安全的注解类型可以避免使用字符串时会出现的问题。在使用字符串来区分时,可能由于字符串内容的细微错误而造成难以发现的问题。

Google Dart语言

Google的开发人员似乎热衷于开发新的编程语言,而且每一次新的语言都很造成比较大的影响。前不久,Google的开发人员发布了新的编程语言Dart。 Dart语言的目标是创建结构化的Web应用。在使用方式上类似Node.js和GWT,即在服务器端和客户端采用相同的编程语言。在Node.js中, 都是使用的JavaScript;在GWT中则是以Java为主;而Dart则更像是升级版的GWT,只是用了一种设计更好的语言来替代Java。在服务 器端,Dart运行在虚拟机(DartVM)之上;而在浏览器端,则转换成JavaScript来执行。

在语法上,Dart像是Scala和JavaScript的一个结合体。Dart中有类和接口的概念,同时类型声明是可选的。在Dart中,变量的 类型声明是可选的。这么设计的出发点是让开发人员可以根据开发的不同阶段以及应用的类型来选择合适的类型声明策略。在初期的原型开发阶段或是开发小型应用 时,使用动态类型是一个不错的选择;而对于复杂的模块化的大型应用来说,采用静态类型则是一个更好的做法。Dart并不对类型声明的选择做出限制。

下面的Dart代码示例展示了可选类型和类继承的基本用法。

class Animal {
 var legs;
 Animal(this.legs); //简化的构造方法
 tellMyLegs() { print(this.legs); }
}
class Dog extends Animal {
 Dog() : super(4);
}
main() {
 var dog = new Dog();
 dog.tellMyLegs(); //输出4

}

值得一提的是Dart的并发编程模型。Dart程序在运行时总是单线程的,这点类似JavaScript。并发性是通过类似Actor的隔离体(isolate)来完成的。每个隔离体是一个并发运行的单元,有自己的内存和执行逻辑。隔离体之间通过消息传递来进行通讯。Dart中的隔离体与HTML5中的Web Worker非常相似。

Dart的目标并不是替代JavaScript或Java,而是面向移动平台。在Dart中,除了核心库之外,还有一个DOM API的库,可以对DOM进行操作。

Dart语言由于刚发布不久,很多东西还处于比较初级的阶段。不过相关的资源都是开放源代码的。感兴趣的人可以关注下面的链接:Dart语言官方网站、Google Code上的Dart源代码和DartForce网站。最简单的做法是下载Linux和Windows平台(不支持Windows XP)上的Dart虚拟机,并写一些Dart代码来进行试验。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 应用
, 注解
, 容器
, inmemory
, java 注入
, requestscope
, 一个
, Dart
, 容器时间同步
, java注解的作用
, java注解作用
, js依赖注入
js作用域上下文
google dart语言、google dart、google dart android、dart语言、dart语言教程,以便于您获取更多的相关知识。

时间: 2024-08-20 00:28:16

Java那些事儿 - JavaOne 2011、CDI和Google Dart语言的相关文章

推动Java前进--Java Strategy Keynote JavaOne 2011

每年的JavaOne都会发布关于Java未来发展的计划或愿景,在今年的Java Strategy Keynote中,Oracle则向大家描述了将如何推动Java继续前进.本文是JavaOne2011的官方博文,概述了Java Strategy Keynote中提及的重要内容.(2011.10.07最后更新) 周四的战略主旨演讲展示了Oracle在对待Java投资与创新方面的长期愿景.该议题包罗广泛,涉及技术,合作伙伴,宣言和路线图--从移动与手持设备,到桌面应用,再到云.早上,先由David W

JavaOne 2011战略主题:Java ME、SE和EE的未来规划

Java EE的下个版本将支持云计算.多站点(multi-tenancy,多站点,多租户).可扩展以及缓存等特性.在近日举行的JavaOne 2011大会上,来自Oracle团队的Adam Messinger.Hasan Rizvi和Cameron Purdy分别针对不同Java平台的产品路线图进行了介绍,其中包括移动版(ME,Micro Edition).标准版(SE,Standard Edition)以及企业版(EE,Enterprise Edition)这三种Java平台. Cameron

Google跨语言搜索功能关闭因为不吸引用户

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Google跨语言搜索以前会出现在搜索工具里,你可以直接使用中文关键词搜索英文内容(举个例子,并非只有中-英).这个功能在几年前还是非常实用的,当时如果想搜索其他语言的信息,必须输入对应语言的关键词,否则结果会非常差.现在Google认为这的确是个非常伟大的功能,但用的人好像不是很多.他们希望把精力放在优化页面.技术.改善人类生活上--于是就把他给砍了. 个人感

2011年四季度Google斥资9.51亿建数据中心

在2011年最后一个季度,谷歌对其互联网基础设施投资近10亿美元,记录显示为9.51亿美元的资本支出.谷歌在基础设施方面开支超过了2011年第三季度,当时他的投资为6.http://www.aliyun.com/zixun/aggregation/19203.html">8亿美元. 投资增加主要是由于对谷歌的国际数据中心网络进行扩充.在最近几周,该公司已经宣布了四个新的数据中心项目,包括三个新的设施,在三个亚洲市场(新加坡,台湾和香港),在都柏林的一个新的数据中心. 资本性支出是一个长期资

五大原因导致 Google 放弃在 Chrome 中使用 Dart 语言

最新发布的 Dart 已经非常接近下版本 Dart 1.9,它加入了众人期待的 Dart 1.9 中的特性,如:异步/等待和 Dart 分析服务器,实际上,发布的时候它并没吸引到众人的眼光.为什么呢?主要是因为 Dart 不是 web 中的主流开发语言.同时也因为这个原因,Google 不会将其集成到 Chrome 浏览器中. 那么,是什么导致 Google 不将 Dart 作为重要的 web 开发语言呢? 主要有下面五个原因: JavaScript 在使用中占有统治地位--JavaScript

Java要挂?Kotlin做安卓开发一级语言

在最近几年的流行开发语言评比中,JAVA一直稳居榜首.这不仅取决于JAVA自身拥有很多优点极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程之外,还因为JAVA的生态环境建设比较好,比如它也是我们常用的安卓操作系统的开发一级语言. 当然,JAVA也面临一些困境,比如与甲骨文的官司,可谓是旷日持久. 但是,在上周末召开的谷歌IO大会上,一开始谷歌就宣布了Android设备超过20亿部的好消息.但是对于程序员来说,更重要的消息被谷歌放在了大会的最后:谷歌将Kotlin语言取代JAVA

java实现任意四则运算表达式求值算法_C 语言

本文实例讲述了java实现任意四则运算表达式求值算法.分享给大家供大家参考.具体分析如下: 该程序用于计算任意四则运算表达式.如 4 * ( 10 + 2 ) + 1 的结果应该为 49. 算法说明: 1. 首先定义运算符优先级.我们用一个 Map<String, Map<String, String>> 来保存优先级表.这样我们就可以通过下面的方式来计算两个运算符的优先级了: /** * 查表得到op1和op2的优先级 * @param op1 运算符1 * @param op2

java web项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)

答辩每个人的总分为1.5分.每个人主要问3个问题. 开发流程===>系统架构====>项目模块+功能===>项目得失重定向与转发:?九个隐式对象?get与post的区辨:?jsp有静态包含,动态包含,两者的区辨:?什么是MVC:?web系统架构:? java web项目答辩总结试题 注释:用楷体写的就是用自己组织的话来回答老师的问题. 1 http协议全名和特点 (答辩老师:你对HTTP的是怎么理解的: 答辩同学:首先HTTP是一种超文本传输协议,也是一种无状态的协议.        

Google Dart编程语法和基本类型学习教程_基础知识

1. 变量声明 如何定义变量 复制代码 代码如下: var name = 'Bob'; 变量的初始值 复制代码 代码如下: int lineCount;assert(lineCount == null); // Variables (even numbers) are initially null. 可以使用var,也可以直接指定类型.final, 定义为final的变量,值不能够被更改 复制代码 代码如下: final name = 'Bob'; // Or: final String nam