.net 系统框架是如何管理事务的?

小灰狼 2020-04-16 10:04:27
本人Java工程师,偶尔做做 .net 下的东东

一直不太明白 dot net 下对事务管理似乎不太关注它们的一致性!

先说说Java的机制。
在Java项目里,特别是 Web 项目里,对数据库事务的管理很多时候都是由框架自动完成的,感觉很方便也很合理。
比如在一个Web项目中,一般是框架把一个数据库连接和当前的线程绑定,这样一来,在程序的任何地方如果想访问数据库,可以通过框架把与当前线程绑定的连接取到,然后访问数据库。当然,这是基本原理,中间还会有很多机制。
这样做的好处是,一方面框架保证了连接的打开和关闭,以前一直困扰程序员的有连接打开却没有关闭的现象不再存在;另一方面是,代码里不必再花太多工夫关注事务了,方法调用方法,然后被调用的方法里又调用其它方法……这些方法访问数据库时,只要是在一个线程里,就肯定是在一个事务里。

但是在 .net 里似乎没有这种机制。以 EntityFramework 为例,如果我没有理解错的话,它是通过一个 Context 对象来管理事务的,在这个 Context 对象上进行的操作才属于同一个事务。
如此一来,前面说的两个问题。事务管理方面,在业务逻辑开始的地方,使用 using(Context ctx = new DefaultContext()) 保证事务的开启和关闭,这需要人工管理;在事务管理方面,如果方法1调用为方法2,则方法1要把一个 Context 对象通过参数传递给方法2,如果方法2调用方法3,也是如此。
当然,我们可以通过程序架构市里时,把 Context 对象或者 Connection 对象进行封装,把它放到线程静态变量中,这样就不必把 Context 或 Connection 对象从方法传来传去!十年前写过一个简单的 asp.net webform 项目,我就是这样管理连接的!

另外,我看一些朋友写的 dot net 系统,他们的做法都没有关注事务的一致性。比如对数据表的插入操作,被封装成一个方法,在这个方法里,临时打开连接,插入操作完成之后马上关闭,打开连接、执行操作、得到结果、关闭连接都在这个方法里完成。如果有一个业务需要连接插入三个表,那么至少会打开三次连接,并且三次插入操作不在同一事务中!一旦插入一、二个表成功,第三个表插入失败,事务无法回滚,业务逻辑会不完整!为此,我曾经问过那些朋友,他们说如果遇到事务,会单独写几个方法,连接进行数据库访问。虽然他的办法可行,但本人感觉总是没那么完善,插入操作要被重写!

想想 dot net 和 Java 竞争了有20年了,没道理在这个问题上会明显的处于下风,并且个人感觉这种问题解决应该不是什么难事!还是说 dot net 在处理数据库事务方面有独特的思想?
...全文
1121 56 打赏 收藏 转发到动态 举报
写回复
用AI写文章
56 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2020-04-23
  • 打赏
  • 举报
回复
引用 59 楼 m0_47293827 的回复:
在Java项目里,特别是 Web 项目里,对数据库事务的管理很多时候都是由框架自动完成的,感觉很方便也很合理。 说明楼主也不了解java对事务的实现
哦!?请问我在哪里说错了吗?
m0_47293827 2020-04-23
  • 打赏
  • 举报
回复
在Java项目里,特别是 Web 项目里,对数据库事务的管理很多时候都是由框架自动完成的,感觉很方便也很合理。 说明楼主也不了解java对事务的实现
江湖评谈 2020-04-21
  • 打赏
  • 举报
回复
引用 52 楼 小灰狼 的回复:
[quote=引用 46 楼 tangyanzhi1111 的回复:] 并不是说怂你钻空子,就显得高人一等,而是你自己一直在抽自己 你说只要是在一个线程里,就肯定是在一个事务里。可见你根本不是不够严谨有漏洞, 而是你根本不懂,基础的东西都不懂 后面开始装逼,另外,让我这个业余 dotnet 工程师告诉你。你算什么玩意,需要你告诉? 往后面,你就开始抽自己耳光 再后面,你直接篡改了自己说的话 本身是技术交流,不妨看看谁先恶语相向?嘴上积德,笑死人。 没自知之明的货色 ,就该被人扇。
关于 dotnet 的技术问题,微软的官方文档都提供给你了,你依然坚持你是对的,那你就坚持好了,反正你做的不是我的项目! 关于 java 的问题,你觉得你才是对的,那你就觉得好了! 反正我认输,你赢了,爽不爽! 关于恶语相向,我找了半天,发现也就一句业余工程师告诉你什么什么之类的话可能刺激到您!于是收到了来自某人关于“智障”的诅咒! 好吧,我又错了,您老人家怎么会错呢,您说的一定是对的,因为您可是天才!微软件的官方文档都找出了问题,这问题可不一般,这可是足以颠覆 dotnet 开发模式的大毛病!对您这样的天才,“谦虚”这个词绝对不能用在您老人家身上的,那是对您老人家的侮辱! [/quote] 别逗了,微软文档有你说的 数据库关闭是非托管? 没人想跟你争输赢,但是你是真的不懂,逼还装得一样一样的。 搞得一副自己很委屈很大度的的样子。
qq_36786068 2020-04-21
  • 打赏
  • 举报
回复
其实他你主要是正好撞枪口上了,我也观察了这帮伙计,他们天天折腾线程 你要说 Future 和 Promise他早不跟你纠结了,一半人直接蒙圈,另一半人也只是听说有个 async/await 你没看着sp1234已经开始发飙了么,不管在那个帖子,那个内容一律回复,0202年了,你们就不能玩点新的?
小灰狼 2020-04-21
  • 打赏
  • 举报
回复
引用 40 楼 qq_36786068 的回复:
哎呀,我真的没法了,不要管是啥spring boot,什么hibernate 这么做唯一的目的,就是线程最原始的目的,他并发了,他没堵在那里等着输出。而且最外面可以直接挂接全局处理,线程异常挂了,我就回滚,如此而已。
引用 41 楼 qq_36786068 的回复:
跟明确点说 他甚至应该自己管了一个线程池,并不是你说我开了个线程就ok了 框架,本身应该给你内部分线程池,你开的只他取出来的,并且受框架控制的,估计是代理注入的,启动前直接维护好了context的,并且代理了方法,异常直接回滚
其实我作为常年使用Java的工程师,一直使用那种模式管理数据库事务,感觉很方便,思维上已经习惯了。 但进入到 dotnet 项目之后,发现很多示例,以及朋友的dotnet项目,都要手动进行管理,或者直接没有事务(任何数据库访问都是打开然后立刻关闭)。因此才想在这里发帖问问 dotnet 平台上是如何处理这事的。 在 java 中,也不是说事务就一定要和线程进行绑定,这只是一种使用模式,并且在多线程环境中,特别是 web 编程里,这种方式很方便。另外,java中说的框架,和 dotnet 中的框架(dotnet framework)并不是一个概念,它只是一堆类库,然后在这个库的环境下进行开发。
小灰狼 2020-04-21
  • 打赏
  • 举报
回复
引用 46 楼 tangyanzhi1111 的回复:
并不是说怂你钻空子,就显得高人一等,而是你自己一直在抽自己 你说只要是在一个线程里,就肯定是在一个事务里。可见你根本不是不够严谨有漏洞, 而是你根本不懂,基础的东西都不懂 后面开始装逼,另外,让我这个业余 dotnet 工程师告诉你。你算什么玩意,需要你告诉? 往后面,你就开始抽自己耳光 再后面,你直接篡改了自己说的话 本身是技术交流,不妨看看谁先恶语相向?嘴上积德,笑死人。 没自知之明的货色 ,就该被人扇。
关于 dotnet 的技术问题,微软的官方文档都提供给你了,你依然坚持你是对的,那你就坚持好了,反正你做的不是我的项目! 关于 java 的问题,你觉得你才是对的,那你就觉得好了! 反正我认输,你赢了,爽不爽! 关于恶语相向,我找了半天,发现也就一句业余工程师告诉你什么什么之类的话可能刺激到您!于是收到了来自某人关于“智障”的诅咒! 好吧,我又错了,您老人家怎么会错呢,您说的一定是对的,因为您可是天才!微软件的官方文档都找出了问题,这问题可不一般,这可是足以颠覆 dotnet 开发模式的大毛病!对您这样的天才,“谦虚”这个词绝对不能用在您老人家身上的,那是对您老人家的侮辱!
qq_36786068 2020-04-21
  • 打赏
  • 举报
回复
如今的java也大量充满 Future 和 Promise方式 也就是俺们的异步,所以他们使用线程也没必要惊讶,等同EF.core给你的 asyn方式,so。 await xxx.updateasyn(),就不能算线程,可以到处使用,并且能事务的东西??
小灰狼 2020-04-21
  • 打赏
  • 举报
回复
引用 57 楼 tangyanzhi1111 的回复:
既然你知道自己没资格,你大言不惭的说,让我这个业余 dotnet 工程师告诉你 ? 又开始自己抽自己? 你所谓的被别人认可就是 ,只要是在一个线程里,就肯定是在一个事务里 这种基础认知错误的东西? 我还说我曾经接见过比尔盖茨呢 ,连微软的 widnows系统都是我发明的呢,牛谁不会吹
我说我业余,是一种谦虚的说法,你还真当我业余?小伙子情商有待提高啊! 现在全栈工程师多得是,只是本人主要项目是用java而已! 既然说到线程这种具体的技术问题,OK,那就继续跟你掰扯一下: 在一个线程里,如果打开一个连接,或者启动一个事务,你把它放到一个静态线程变更里,那么在多线程环境里,在其它任何地方,你从这个线程变更中取到的连接或者事务,肯定是同一个。 比如你有10个线程,全部都在执行,并且全部都打开了连接、启动了事务。程序大概是这样的: public class TransMgr : IDispose{ [ThreadStatic] private static TransMgr threadInstance; private Connection conn; private Transaction trans; public static Connection CurrentConnection { get{ return threadInstance.conn; } } public static TransMgr ThreadInstance { if(threadInstance == null){ conn = new ...... trans = conn.BeginTransaction(); } return threadInstance; } public override void Dispose(){ if(this.trans != null) this.trans.Close(); if(this.conn != null) this.conn.Close(); } } ...... // 业务开始 using(TransMgr tm = TransMgr.ThreadInstance){ method1(); method2(); .... methodn(); } 在 method1, method2, method3...... methodn() 里,可以通过调用 TransMgr.CurrentTransaction 得到与当前线程绑定的一个事务,这个方法是线程安全的。假设你的10个线程分别是 thread1, thread2, thread3....thread10, 它们会分别启动事务 trans1, trans2, trans3....trans10。比如thrread4 启动的是 trans4,那么这个线程在 method1, method2, method3....threadn 里通过 TransMgr.CurrentTransaction 得到的,一定是 trans4 对象,各个线程之间得到的事务对象是各自隔离的。直到 using 语句块执行完毕! 这里用到了一个不常用的技术,就是所谓的“线程静态”,这在 java 里比较常用。里面用到 ThreadStatic 属性,整明白了这一点,啥都清楚了! 到此为止,本人感觉已经对线程绑定事务进行了很彻底的解释。如果你想玩文字游戏,我直接认输,毕竟我不是专业写文档的,实在没法保证语句里面没有漏洞。 至于其它的技术问题,既然你如此坚持,我就不跟你争了。因为这个帖主要是想讨论事务管理,你有兴趣就和你的同行们讨论,然后在心里往死里BS我!
江湖评谈 2020-04-21
  • 打赏
  • 举报
回复
引用 56 楼 小灰狼 的回复:
[quote=引用 55 楼 tangyanzhi1111 的回复:] 别逗了,微软文档有你说的 数据库关闭是非托管? 没人想跟你争输赢,但是你是真的不懂,逼还装得一样一样的。 搞得一副自己很委屈很大度的的样子。
我懂不懂不是你说了算了,你还没这个资格! 我负责主导设计的项目多了去了,项目里关于线程的技术用得非常多,本人也玩得很成功,老板认可、客户认可、技术同行认可,但您老人家认不认可已经无所谓了! 关于技术问题,本人在您心里已经被帖了标签,可以肯定我不可能说服得了你。既然你依然坚持,你可以向你的同事、同学或者同行探讨! 当然您也可以说,我凭什么要听你的,我就不去跟他们探讨,我的观点就是对的,这是您的自由,如果您不乐意,算我多嘴! [/quote] 既然你知道自己没资格,你大言不惭的说,让我这个业余 dotnet 工程师告诉你 ? 又开始自己抽自己? 你所谓的被别人认可就是 ,只要是在一个线程里,就肯定是在一个事务里 这种基础认知错误的东西? 我还说我曾经接见过比尔盖茨呢 ,连微软的 widnows系统都是我发明的呢,牛谁不会吹
小灰狼 2020-04-21
  • 打赏
  • 举报
回复
引用 55 楼 tangyanzhi1111 的回复:
别逗了,微软文档有你说的 数据库关闭是非托管? 没人想跟你争输赢,但是你是真的不懂,逼还装得一样一样的。 搞得一副自己很委屈很大度的的样子。
我懂不懂不是你说了算了,你还没这个资格! 我负责主导设计的项目多了去了,项目里关于线程的技术用得非常多,本人也玩得很成功,老板认可、客户认可、技术同行认可,但您老人家认不认可已经无所谓了! 关于技术问题,本人在您心里已经被帖了标签,可以肯定我不可能说服得了你。既然你依然坚持,你可以向你的同事、同学或者同行探讨! 当然您也可以说,我凭什么要听你的,我就不去跟他们探讨,我的观点就是对的,这是您的自由,如果您不乐意,算我多嘴!
江湖评谈 2020-04-20
  • 打赏
  • 举报
回复
引用 24 楼 小灰狼 的回复:
[quote=引用 15 楼 tangyanzhi1111 的回复:] 这么看来java真是一门落后的语言 .net 里面根本不需要所谓线程跟数据库绑定,且线程跟数据库绑定也不是为了程序任何地方想访问就访问。你写个数据库类,就可以在程序任何地方访问。 一个线程里并非一个事物,同样一个是事物也并非只有一个线程。至于数据库的打开和关闭在.net 里面根本就不需要手动,GC回收可以直接帮你搞定。
GC能帮你搞定数据库的打开和关闭??? 您老人家可别在我这个业余 dot net 选手面前丢人哦! [/quote] 当然 数据库打开自然要手动,至于关闭,你自己不关闭可以自动帮你回收 一个数据库连接和当前的线程绑定,这样一来,在程序的任何地方如果想访问数据库。 只要是在一个线程里,就肯定是在一个事务里。 你在CSDN混了 11年,连业余的货色都不如。基本东西都搞不清楚,别丢人现眼了,还是去种田吧,那个比较适合你
通者归来 2020-04-20
  • 打赏
  • 举报
回复
引用 26 楼 小灰狼 的回复:
[quote=引用 21 楼 通者归来 的回复:] 首先,你的这个比喻讨论的是一个业务的完整性,业务的完整性你就应该在业务设计,系统设计的领域范畴来讨论。完全没有必要拿到Java和.Net来讨论。只要你系统设计考虑的周全这个方案由JAVE和.Net来实现效果都是一样的。你可能说的是方便性来讨论,可能你用习惯了JAVA觉得它来实现比较顺手而已。 其次,你说经过一堆复杂的计算处理之后save(A obj),Save(B obj),也有可能因某些原因只调用其中某一个等等,其实这些都是业务规则的事,你分析的到位,分层的合理,难道保证数据存储的一致性还有难度?难道一定要在复杂的逻辑中分散地去操作数据库,确保这一系列的操作是针对同一事务的,才是完美的?我想可能对事务讨论,不如讨论系统设计整体把握度的提高比讨论Jave还.Net更有意义。
你的意思就是说,无论多复杂的业务逻辑计算,全部先算好,最好统一进行保存操作? [/quote] 其实你心里早就有答案了,言尽于此。
小灰狼 2020-04-20
  • 打赏
  • 举报
回复
引用 15 楼 tangyanzhi1111 的回复:
这么看来java真是一门落后的语言 .net 里面根本不需要所谓线程跟数据库绑定,且线程跟数据库绑定也不是为了程序任何地方想访问就访问。你写个数据库类,就可以在程序任何地方访问。 一个线程里并非一个事物,同样一个是事物也并非只有一个线程。至于数据库的打开和关闭在.net 里面根本就不需要手动,GC回收可以直接帮你搞定。
GC能帮你搞定数据库的打开和关闭??? 您老人家可别在我这个业余 dot net 选手面前丢人哦!
引用 17 楼 ying1234 的回复:
我无法理解你所说的"只要是在一个线程里,就肯定是在一个事务"这句话是什么意思,一个线程里不一定就是一个事务吧。你还是要自已去控制。
好吧,这句话不够严谨! 我的意思是,在WEB编程环境里,一个来自客户端的请求,一定会放到一个线程里处理完毕,它不会被拆到多个线程里进行处理。比如有 m1, m2, m3......mn,这 n 个方法被一个 http 请求处理,它一定会在一个线程里被连接调用,中间可能会被中断,但被中断的线程继续执行时,与被中断前的逻辑是一致的,不存在 m1, m2, m3在线程 A 执行,然后中断再交给线程 B 继续执行 m4, m5......。 基于这一点,只需要在请求的开始地方,启动事务,并绑定线程,业务处理完毕后,提交事务并解除绑定。当然在 m1, m2, ...... 这些方法里,可以随时从线程静态变量中取到事务管理的相关对象管理事务。
小灰狼 2020-04-20
  • 打赏
  • 举报
回复
引用 14 楼 闭包客 的回复:
如果这个帖子是讨论 Java 是不是比 .net 更注重数据的一致性,我认为意义不大。因为数据的一致性是很基本的东西,一个开发平台如果不注重数据的一致性,那它在市场上根本没有立足之地。 我不认为事务跟线程的绑定是必须的,比如 Java 最基本的 JDBC,它的事务就跟线程没有关系。 把事务跟线程做绑定,属于一种概念上的混淆。它会遇到这样的问题: 一、如果我在一个线程里面,要做两个不同的事务,怎么办呢? 二、如果我两个线程提交的数据,要使用一个事务,那又怎么办呢? 但是对事务跟线程绑定的这种做法,我还是比较欣赏的。因为在 web 服务器是用线程处理请求。一个请求里面大多数都是只有一个事务的。这种做法在 web 开发里面还是比较聪明的。这种做法在 asp.net 里面,同样可以实现。 如果是做一个桌面程序,它的主线程是在程序关闭之后才会退出的,那么这种事务跟线程绑定的做法,如果你不做特殊处理的话,就要等到程序关闭之后数据才会被提交。
我没打算拿 java 和 dotnet 进行对比,做一个 java 粉或者 dot net 粉,那是出道刚几年的新手喜欢的角色。但是开发过程中却难免要拿来对比,比如这里说的如何处理事务,因为我开发过程中就要考虑事务怎么处理。 Java从来没有规定事务就一定要和线程进行绑定,它流行起来是因为别的公司不断对它的外围技术进行完善。但这是目前流行的开发框架的流行做法。框架这样做也很容易理解,因为在WEB这样的多线程环境中,大多数的事务处理就是一个线程完成一个事务;何况,框架也只是默认将线程和事务绑定,如果你不想绑定,或者想自己控件事务的提交和回滚,框架也是支持的。 桌面应用程序基本上没有多线程环境事务的问题,就算有,处理也简单!
xiaoxiangqing 2020-04-20
  • 打赏
  • 举报
回复
java事务,基本上是由框架提供的,很方便
qq_36786068 2020-04-20
  • 打赏
  • 举报
回复
所以你们的回答,也是千篇一律的“他不响应了,开线程“
qq_36786068 2020-04-20
  • 打赏
  • 举报
回复
这点上人家还是可以滴,我前面的翻了20,30篇帖子,其实这里面有一半问题问的都是“他不响应了,怎么办”
qq_36786068 2020-04-20
  • 打赏
  • 举报
回复
使用线程来封装数据库访问,在我看并不是什么规定,什么高级技术,什么谁比谁好 他只是采用了“响应式编程”的号召,无论什么情况我们都要响应,哪怕线程异常了,程序也没崩溃,他能继续响应别的请求
江湖评谈 2020-04-20
  • 打赏
  • 举报
回复
引用 38 楼 小灰狼 的回复:
[quote=引用 32 楼 tangyanzhi1111 的回复:] 在Java目前流行的框架里,线程绑定事务是目前最最最最流行的做法 一个数据库连接和当前的线程绑定,这样一来,在程序的任何地方如果想访问数据库。 这个是谁告诉你的,数据库和线程绑定就是为了在任何地方数据库? 这个哪个Java框架? 别告诉我你自己的发明的 只要是在一个线程里,就肯定是在一个事务里。 在一个线程里,就只有一个事物,是谁告诉你在一个线程里就一个事物? 一个事物就对应一个线程? 哪个Java框架? 你 智障的地方太多,回去种田吧,这里真不适合你
你去看看 springboot 框架的资料,里面的事务管理就是和线程进行关联 在 springboot 流行之前,hibernate 这个 orm 框架对连接的管理,也是建议把 Transaction 和线程进行绑定。随便找一本讲 hibernate 的书,基本上都会建议读者这么作。 在 dotnet 里没看到这样用,不说明这种用法不存在,但在Java业界这是最流行的做法,你不会就麻烦谦虚一点,不要在这里睁眼说瞎话。 关于 dotnet 垃圾回收,你可以看看微软 msdn 上的文章: https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/fundamentals 里面有句话:如果托管对象使用非托管对象的本机文件句柄来引用非托管对象,则必须显式释放非托管对象,因为垃圾回收器仅跟踪托管堆上的内存。 另外,我承认前面关于描述细节的描述不够严谨,有漏洞。如果你觉得这样钻空子然后怼人很过瘾,很有面子的话,那么OK,我成全你,您赢了,您牛B,您才是大牛。 最后,作为长你几岁的大哥,劝你嘴上积德,别动不动就什么智障之类恶语相向!我发这篇帖子,目的是为了技术交流,而不是为了怼怼人过把瘾!也不是一定要争个输赢,如果把输赢看得过重,则偏离了发帖的初衷。 [/quote] 并不是说怂你钻空子,就显得高人一等,而是你自己一直在抽自己 你说只要是在一个线程里,就肯定是在一个事务里。可见你根本不是不够严谨有漏洞, 而是你根本不懂,基础的东西都不懂 后面开始装逼,另外,让我这个业余 dotnet 工程师告诉你。你算什么玩意,需要你告诉? 往后面,你就开始抽自己耳光 再后面,你直接篡改了自己说的话 本身是技术交流,不妨看看谁先恶语相向?嘴上积德,笑死人。 没自知之明的货色 ,就该被人扇。
qq_36786068 2020-04-20
  • 打赏
  • 举报
回复
这其实也解释了java的一个问题,我跟java其实也经常配合,连接池满是大部分java程序的普遍性问题,尤其你知道他们经常会用jmter做大规模并发测试,一个经常见的场景是,测试在用jmter做大规模并发,而java开发组则会突然爆发“巨大动静”,全都站起喊“搞啥啊,数据库访问不了呢,那个谁上去检查一下数据库” 5分钟后消息回来了---------连接池满,重启好了。 然后测试十分委屈的站起来说“对不起,我在做大并发测试”
加载更多回复(36)
Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第一部分 核心技术 第四章 对象、对象工厂和应用程序上下文 4.1.简介 4.2.IObjectFactory,IApplicationContext和IObjectDefinition接口介绍 4.2.1.The IObjectFactory和IApplicationContext 4.2.2.对象定义 4.2.3.对象的创建 4.2.3.1.通过构造器创建对象 4.2.3.2.通过静态工厂方法创建对象 4.2.3.3.通过实例工厂方法创建对象 4.2.4.泛型类的对象创建 4.2.4.1.通过构造器创建泛型类的对象 4.2.4.2.通过静态工厂方法创建泛型类的对象 4.2.4.3.通过实例工厂方法创建泛型类的对象 4.2.5.对象标识符(id和name) 4.2.6.Singleton和Prototype 4.3.属性,协作对象,自动装配和依赖检查 4.3.1.设置对象的属性和协作对象 4.3.2.构造器参数解析 4.3.2.1.根据参数类型匹配构造器参数 4.3.2.2.根据参数索引匹配构造器参数 4.3.2.3.根据名称匹配构造器参数 4.3.3.详细讨论对象属性和构造器参数 4.3.3.1.设置空值 4.3.3.2.设置集合值 4.3.3.3.设置泛型集合的值 4.3.3.4.设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref节点的简短格式 4.3.3.9.复合属性名 4.3.4.方法注入 4.3.4.1.查询方法注入 4.3.4.2.替换任意方法 4.3.5.引用其他对象或类型的成员 4.3.5.1.使用对象或类的属性值进行注入 4.3.5.2.使用字段值进行注入 4.3.5.3.使用方法的返回值进行注入 4.3.6.IFactoryObject接口的其它实现 4.3.6.1.Log4Net 4.3.7.使用depends-on 4.3.8.自动装配协作对象 4.3.9.检查依赖项 4.4.类型转换 4.4.1.枚举类型的转换 4.4.2.内置的类型转换器 4.4.3.自定义类型转换器 4.4.3.1.使用CustomConverterConfigurer类 4.5.自定义对象的行为 4.5.生命周期接口 4.5.1.1.IInitializingObject接口和init-method属性 4.5.1.2.IDisposable接口和destroy-method属性 4.5.2.让对象了解自己的容器 4.5.2.1.IObjectFactoryAware接口 4.5.2.2.IObjectNameAware接口 4.5.3.IFactoryObject接口 4.6.抽象与子对象定义 4.7.与IObjectFactory接口交互 4.7.1.获得IFactoryObject对象本身,而非其产品 4.8.使用IObjectPostProcessor接口自定义对象 4.9.使用IObjectFactoryPostProcessor定制对象工厂 4.9.1.PropertyPlaceholderConfigurer类 4.9.1.1.使用环境变量进行替换 4.9.2.PropertyOverrideConfigurer类 4.10.使用alias节点为对象添加别名 4.11.IApplicationContext简介 4.12.配置应用程序上下文 4.12.1.注册自定义解析器 4.12.2.创建自定义资源处理器 4.12.3.配置类型别名 4.12.4.注册类型转换器 4.13.IApplicationContext接口的扩展功能 4.13.1.上下文继承 4.13.2.使用IMessageSource接口 4.13.3.在Spring.NET内部使用资源 4.13.4.松耦合事件模型 4.13.5.IApplicationContext的事件通知 4.14.定制IApplicationContex中对象的行为 4.14.1.IApplicationContextAware标识接口 4.14.2.IObjectPostProcessor接口 4.14.3.IObjectFactoryPostProcessor接口 4.14.4.PropertyPlaceholderConfigurer类 4.15.从其它文件中导入对象定义 4.16.服务定位器访问 第五章. IObjectWrapper接口和类型转换 5.1.简介 5.2.使用IObjectWrapper接口管理对象 5.2.1.读、写普通及嵌套的属性 5.2.2.其它功能 5.3.类型转换 5.3.1.转换枚举类型 5.4.内置类型转换器 第六章. IResource接口 6.1.简介 6.2.IResource接口 6.3.内置的IResource实现类 6.4.IResourceLoader接口 6.5.IResourceLoaderAware接口 6.6.应用程序上下文和IResource路径 第七章. 多线程和并发操作 7.1.简介 7.2.线程本地存储 7.3.同步基础 7.3.1.ISync 7.3.2.SyncHolder 7.3.3.Latch 7.3.4.Semaphore 第八章. 对象池 8.1.简介 8.2.接口和实现 第九章. Spring.NET杂记 9.1.简介 9.2.PathMatcher 9.2.1.通用规则 9.2.2.匹配文件名 9.2.3.匹配子目录 9.2.4.大小写需要考虑,斜线可以任意 第十章. 表达式求值 10.1.简介 10.2.表达式求值 10.3.语言参考 10.3.1.文字表达式 10.3.2.属性,数组,列表,字典,索引器 10.3.2.1.定义内联的数组、列表和词典 10.3.3.方法 10.3.4.操作符 10.3.4.1.关系操作符 10.3.4.2.逻辑操作符 10.3.4.3.算术运算符 10.3.5.赋值 10.3.6.表达式列表 10.3.7.类型 10.3.8.类型注册 10.3.9.构造器 10.3.10.变量 10.3.10.1.'#this'和'#root'变量 10.3.11.三元操作符(If-Then-Else) 10.3.12.列表的投影(Projection)和选择(Selection) 10.3.13. 集合处理器和聚合器 10.3.13.1.Count聚合器 10.3.13.2.Sum聚合器 10.3.13.3.Average聚合器 10.3.13.4.Minimum聚合器 10.3.13.5.Maximum聚合器 10.3.13.6.nonNull处理器 10.3.13.7.distinct处理器 10.3.13.8.sort处理器 10.3.14.引用容器中的对象 10.3.15.Lambda表达式 10.3.16.空目标 10.4.本章使用的示例类型 第十一章. 验证框架 11.1.简介 11.2.用法示例 11.3.验证对象组 11.4.验证对象 11.4.1.条件验证对象 11.4.2.必需性验证对象 11.4.3.正则表达式验证对象 11.4.4.通用验证对象 11.4.5.条件型验证 11.5.验证行为 11.5.1.错误消息行为 11.5.2.通用行为 11.6.引用验证对象 11.7.在ASP.NET中的使用技巧 11.7.1.显示验证错误 11.7.1.1.配置错误显示类 第十二章. 使用Spring.NET进行面向方面的编程 12.1.简介 12.1.1.AOP基本概念 12.1.2.Spring.NET AOP的功能 12.1.3.Spring.NET的AOP代理 12.2.Spring.NET中的切入点 12.2.1.概念 12.2.2.切入点的操作 12.2.3.Spring.NET提供的切入点实现类 12.2.3.1.静态切入点 12.2.3.2.动态切入点 12.2.4.自定义切入点 12.3.Spring.NET的通知类型 12.3.1.通知的生命周期 12.3.2.通知类型 12.3.2.1.拦截环绕通知 12.3.2.2.前置通知 12.3.2.3.异常通知 12.3.2.4.后置通知 12.3.2.5.引入通知 12.4.Spring.NET中的Advisor 12.5.使用ProxyFactoryObject创建AOP代理 12.5.1.基本原理 12.5.2.ProxyFactoryObject的属性 12.5.3.代理接口 12.5.4.代理一个类 12.6.使用ProxyFactory类以编程方式创建AOP代理 12.7.管理目标对象 12.8.使用“自动代理”功能 12.8.1.自动代理对象的定义 12.8.1.1.ObjectNameAutoProxyCreator 12.8.1.2.DefaultAdvisorAutoProxyCreator 12.8.1.3.AbstractAutoProxyCreator 12.8.2.使用特性驱动的自动代理 12.9.使用TargetSources 12.9.1.动态切换TargetSource 12.9.2.池化TargetSource 12.9.3.PrototypeTargetSource 12.10.定义新的通知类型 12.11.参考资源 第十三章.通用日志抽象层 13.1.简介 13.1.1.Logging API 13.2.实现与配置 13.2.1.控制台Logger 13.3.Log4Net 第二部分. 中间层数据访问 第十四章. 事务管理 14.1.简介 14.2.动机 14.3.核心接口 14.4.用事务进行资源同步 14.4.1.高层次方法 14.4.2.低层次方法 14.5.声明式事务管理 14.5.1.理解Spring.NET声明式事务管理的实现 14.5.2.第一个例子 14.5.3.Transaction特性的设置 14.5.4.通过AutoProxyCreator使用声明式事务 14.5.5.通过TransactionProxyFactoryObject使用声明式事务 14.5.6. 通过ProxyFactoryObject使用声明式事务 14.5.7. Using Abstract object definitions 14.5.8. Declarative Transactions using ProxyFactoryObject 14.6. 编程方式的事务管理 14.6.1.使用TransactionTemplate 14.6.2.使用IPlatformTransactionManager 14.7.选择编程方式还是声明方式 第十五章. 数据访问对象 15.1.简介 15.2.统一的异常体系 15.3.为数据访问对象提供的统一抽象基类 第十六章. DbProvider 16.1.简介 16.1.1.IDbProvider和DbProviderFactory 16.1.2. XML配置 16.1.3.管理连接字符串 第十七章. 使用ADO.NET进行数据访问 17.1.简介 17.2.动机 17.3.Provider抽象 17.3.1.创建IDbProvider类型的实例 17.4.命名空间 17.5.数据访问的方式 17.6.AdoTemplate简介 17.6.1.执行回调 17.6.2.在.NET 2.0中执行回调 17.6.3. .NET 1.1 17.6.4.AdoTemplate方法指南 17.7.异常翻译 17.8.参数管理 17.8.1. IDbParametersBuilder 17.8.2. IDbParameters 17.9. Mapping DBNull values 17.10. Basic data access operations 17.10.1. ExecuteNonQuery 17.10.2. ExecuteScalar 17.11. Queries and Lightweight Object Mapping 17.11.1. ResultSetExtractor 17.11.2. RowCallback 17.11.3. RowMapper 17.11.4. Query for a single object 17.11.5. Query using a CommandCreator 17.12. DataTable and DataSet 17.12.1. DataTables 17.12.2. DataSets 17.13. Deriving Stored Procedure Parameters 17.14. Database operations as Objects 17.14.1. AdoNonQuery 17.14.2. AdoQuery 17.14.3. MappingAdoQuery 17.14.4. Stored Procedure 17.14.5. DataSetOperation 18. ORM集成 18.1. 简介 第三部分. Web框架 第十九章. Web框架 19.1.简介 19.2.自动装载应用程序上下文和应用程序上下文嵌套 19.2.1. 配置 19.2.2.上下文嵌套 19.3.为ASP.NET页面进行依赖注入 19.3.1.为Web控件进行依赖注入 19.4.Master Page 19.4.1.将子页面与Master Page关联 19.5.双向数据绑定 19.5.1.数据绑定的后台实现 19.5.1.1.绑定方向 19.5.1.2.Formatters 19.5.1.3.类型转换 19.5.1.4.数据绑定事件 19.6.本地化 19.6.1.使用Localizer进行自动本地化(“推”模型) 19.6.2.使用Localizer 19.6.3.手动应用资源(“拉”模型的本地化) 19.6.4.在Web应用程序中进行图像本地化 19.6.5.全局资源 19.6.6.用户语言文化管理 19.6.6.1. DefaultWebCultureResolver 19.6.6.2. RequestCultureResolver 19.6.6.3. SessionCultureResolver 19.6.6.4. CookieCultureResolver 19.6.7.更改语言文化 19.7.结果映射 19.8.客户端脚本 19.8.1.在HTML的head节点内注册客户端脚本 19.8.2.向节点中添加CSS定义 19.8.3.全局目录(Well-Known Directories) 第四部分. 服务 第二十章. .NET Remoting 20.1.简介 20.2.在服务端发布SAO 20.2.1.SAO Singleton 20.2.2.SAO SingleCall 20.2.3.IIS应用程序配置 20.3.在客户端访问SAO 20.4.CAO 最佳实践 20.5.在服务端注册CAO 20.5.1.向CAO对象应用AOP通知 20.6.在客户端访问CAO 20.6.1.向客户端的CAO对象应用AOP通知 20.7. XML Schema for configuration 20.8.参考资源 第二十一章. .NET企业服务 21.1.简介 21.2.服务组件 21.3.服务端 21.4.客户端 第二十二章. Web服务 22.1.服务端 22.1.1.消除对.asmx文件的依赖 22.1.2.向web服务中注入依赖项 22.1.3.将PONO发布为web服务 22.1.4.将AOP代理发布为web服务 22.1.5.客户端的问题 22.2.客户端 22.2.1.WebServiceProxyFactory 22.2.2.WebServiceClientFactory 第二十三章. Windows后台服务 23.1.备注 23.2.简介 23.3.Spring.Services.WindowsService.Process.exe应用程序 23.3.1.安装 23.3.2.配置 23.4.将应用程序上下文发布为Windows服务 23.4.1.service.config 23.4.1.1.让应用程序了解自身的位置 23.4.2.watcher.xml - 可选的配置 23.4.3.bin目录 - 可选 23.5.自定义或扩展 23.5.1. .config文件 第五部分. 与Visual Studio.NET集成 第二十四章. 与Visual Studio.NET集成 24.1.XML编辑与验证 24.2.XML Schema的版本 24.3.集成API文档 第六部分. 快速入门程序 第二十五章. IoC快速入门 25.1.简介 25.2.Movie Finder 25.2.1.开始建立MovieFinder应用程序 25.2.2.第一个对象定义 25.2.3.属性注入 25.2.4.构造器参数注入 25.2.5.总结 25.2.6.日志 25.3.应用程序上下文和IMessageSource接口 25.3.1.简介 25.4.应用程序上下文和IEventRegistry接口 25.4.1.简介 25.5.对象池示例 25.5.1.实现Spring.Pool.IPoolableObjectFactory 25.5.2.使用池中的对象 25.5.3.利用executor执行并行的grep 25.6.AOP 第二十六章. AOP指南 26.1.简介 26.2.基础知识 26.2.1.应用通知 26.2.2.使用切入点-基本概念 26.3.深入探讨 26.3.1.其它类型的通知 26.3.1.1.前置通知 26.3.1.2.后置通知 26.3.1.3.异常通知 26.3.1.4.引入(mixins) 26.3.1.5.通知链 26.3.1.6.配置通知 26.3.2.使用特性定义切入点 26.4.The Spring.NET AOP Cookbook 26.4.1.缓存 26.4.2.性能监视 26.4.3.重试规则 Spring.NET AOP最佳实践 第二十七章. .NET Remoting快速入门 27.1.简介 27.2.Remoting实例程序 27.3.实现 27.4.运行程序 27.5.Remoting Schema 27.6.参考资源 第二十八章. Web框架快速入门 28.1.简介 第二十九章. SpringAir - 参考程序 29.1.简介 29.2.架构 29.3.实现 29.3.1.业务层 29.3.2.服务层 29.3.3.Web层 29.4.总结 第三十章. 数据访问快速入门 30.1.简介 第三十一章. 事务管理快速入门 31.1.简介 31.2.应用程序概述 31.2.1.接口 第七部分. Java开发人员必读 第三十二章. Java开发人员必读 32.1.简介 32.2.Beans和Objects 32.3.PropertyEditor和TypeConverter 32.4.ResourceBundle和ResourceManager 32.5.异常 32.6.应用程序配置 32.7.AOP框架
JAVA开发人员必备是HTML格式的 JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都会遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的各类事件的接口和类。 java.awt.font 提供与字体相关的类和接口。 java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口。 java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。 java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的选择器。 java.nio.channels.spi 用于 java.nio.channels 包的服务提供者类。 java.nio.charset 定义用来在字节和 Unicode 字符之间转换的 charset、解码器和编码器。 java.nio.charset.spi java.nio.charset 包的服务提供者类。 java.rmi 提供 RMI 包。 java.rmi.activation 为 RMI 对象激活提供支持。 java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security 包中的类取代。 java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)密钥。 java.security.spec 提供密钥规范和算法参数规范的类和接口。 java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text 包中类的服务提供者类。 java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 java.util.logging 提供 JavaTM 2 平台核心日志工具的类和接口。 java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类。 javax.accessibility 定义了用户界面组件与提供对这些组件进行访问的辅助技术之间的协定。 javax.crypto 为加密操作提供类和接口。 javax.crypto.interfaces 根据 RSA Laboratories' PKCS #3 的定义,提供 Diffie-Hellman 密钥接口。 javax.crypto.spec 为密钥规范和算法参数规范提供类和接口。 javax.imageio Java Image I/O API 的主要包。 javax.imageio.event Java Image I/O API 的一个包,用于在读取和写入图像期间处理事件的同步通知。 javax.imageio.metadata 用于处理读写元数据的 Java Image I/O API 的包。 javax.imageio.plugins.bmp 包含供内置 BMP 插件使用的公共类的包。 javax.imageio.plugins.jpeg 支持内置 JPEG 插件的类。 javax.imageio.spi 包含用于 reader、writer、transcoder 和流的插件接口以及一个运行时注册表的 Java Image I/O API 包。 javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类。 javax.management.modelmbean 提供了 ModelMBean 类的定义。 javax.management.monitor 提供 monitor 类的定义。 javax.management.openmbean 提供开放数据类型和 Open MBean 描述符类。 javax.management.relation 提供 Relation Service 的定义。 javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax.management.timer 提供对 Timer MBean(计时器 MBean)的定义。 javax.naming 为访问命名服务提供类和接口。 javax.naming.directory 扩展 javax.naming 包以提供访问目录服务的功能。 javax.naming.event 在访问命名和目录服务时提供对事件通知的支持。 javax.naming.ldap 提供对 LDAPv3 扩展操作和控件的支持。 javax.naming.spi 提供一些方法来动态地插入对通过 javax.naming 和相关包访问命名和目录服务的支持。 javax.net 提供用于网络应用程序的类。 javax.net.ssl 提供用于安全套接字包的类。 javax.print 为 JavaTM Print Service API 提供了主要类和接口。 javax.print.attribute 提供了描述 JavaTM Print Service 属性的类型以及如何分类这些属性的类和接口。 javax.print.attribute.standard 包 javax.print.attribute.standard 包括特定打印属性的类。 javax.print.event 包 javax.print.event 包含事件类和侦听器接口。 javax.rmi 包含 RMI-IIOP 的用户 API。 javax.rmi.CORBA 包含用于 RMI-IIOP 的可移植性 API。 javax.rmi.ssl 通过安全套接字层 (SSL) 或传输层安全 (TLS) 协议提供 RMIClientSocketFactory 和 RMIServerSocketFactory 的实现。 javax.security.auth 此包提供用于进行验证和授权的框架。 javax.security.auth.callback 此包提供与应用程序进行交互所必需的类,以便检索信息(例如,包括用户名和密码的验证数据)或显示信息(例如,错误和警告消息)。 javax.security.auth.kerberos 此包包含与 Kerberos 网络验证协议相关的实用工具类。 javax.security.auth.login 此包提供可插入的验证框架。 javax.security.auth.spi 此包提供用于实现可插入验证模块的接口。 javax.security.auth.x500 此包包含应该用来在 Subject 中存储 X500 Principal 和 X500 Private Crendentials 的类。 javax.security.cert 为公钥证书提供类。 javax.security.sasl 包含用于支持 SASL 的类和接口。 javax.sound.midi 提供用于 MIDI(音乐乐器数字接口)数据的 I/O、序列化和合成的接口和类。 javax.sound.midi.spi 在提供新的 MIDI 设备、MIDI 文件 reader 和 writer、或音库 reader 时提供服务提供者要实现的接口。 javax.sound.sampled 提供用于捕获、处理和回放取样的音频数据的接口和类。 javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。 javax.sql.rowset JDBC RowSet 实现的标准接口和基类。 javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口。 javax.swing.colorchooser 包含供 JColorChooser 组件使用的类和接口。 javax.swing.event 供 Swing 组件触发的事件使用。 javax.swing.filechooser 包含 JFileChooser 组件使用的类和接口。 javax.swing.plaf 提供一个接口和许多抽象类,Swing 用它们来提供自己的可插入外观功能。 javax.swing.plaf.basic 提供了根据基本外观构建的用户界面对象。 javax.swing.plaf.metal 提供根据 Java 外观(曾经代称为 Metal)构建的用户界面对象,Java 外观是默认外观。 javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html.parser 提供默认的 HTML 解析器以及支持类。 javax.swing.text.rtf 提供一个类 (RTFEditorKit),用于创建富文本格式(Rich-Text-Format)的文本编辑器。 javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释。 javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的已优化的二进制数据。 javax.xml.bind.helpers 仅由 JAXB 提供者用于: 提供某些 javax.xml.bind 接口的部分默认实现。 javax.xml.bind.util 有用的客户端实用工具类。 javax.xml.crypto 用于 XML 加密的通用类。 javax.xml.crypto.dom javax.xml.crypto 包的特定于 DOM 的类。 javax.xml.crypto.dsig 用于生成和验证 XML 数字签名的类。 javax.xml.crypto.dsig.dom javax.xml.crypto.dsig 包特定于 DOM 的类。 javax.xml.crypto.dsig.keyinfo 用来解析和处理 KeyInfo 元素和结构的类。 javax.xml.crypto.dsig.spec XML 数字签名的参数类。 javax.xml.datatype XML/Java 类型映射关系。 javax.xml.namespace XML 名称空间处理。 javax.xml.parsers 提供允许处理 XML 文档的类。 javax.xml.soap 提供用于创建和构建 SOAP 消息的 API。 javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 javax.xml.transform.stax 提供特定于 StAX 的转换 API。 javax.xml.transform.stream 此包实现特定于流和 URI 的转换 API。 javax.xml.validation 此包提供了用于 XML 文档验证的 API。 javax.xml.ws 此包包含核心 JAX-WS API。 javax.xml.ws.handler 该包定义用于消息处理程序的 API。 javax.xml.ws.handler.soap 该包定义用于 SOAP 消息处理程序的 API。 javax.xml.ws.http 该包定义特定于 HTTP 绑定的 API。 javax.xml.ws.soap 该包定义特定于 SOAP 绑定的 API。 javax.xml.ws.spi 该包定义用于 JAX-WS 2.0 的 SPI。 javax.xml.xpath 此包提供了用于 XPath 表达式的计算和访问计算环境的 object-model neutral API。 org.ietf.jgss 此包提供一个框架,该框架允许应用程序开发人员通过利用统一的 API 使用一些来自各种基础安全机制(如 Kerberos)的安全服务,如验证、数据完整性和和数据机密性。 org.omg.CORBA 提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。 org.omg.CORBA_2_3 CORBA_2_3 包定义对 Java[tm] Standard Edition 6 中现有 CORBA 接口所进行的添加。 org.omg.CORBA_2_3.portable 提供输入和输出值类型的各种方法,并包含 org/omg/CORBA/portable 包的其他更新。 org.omg.CORBA.DynAnyPackage 提供与 DynAny 接口一起使用的异常(InvalidValue、Invalid、InvalidSeq 和 TypeMismatch)。 org.omg.CORBA.ORBPackage 提供由 ORB.resolve_initial_references 方法抛出的异常 InvalidName,以及由 ORB 类中的动态 Any 创建方法抛出的异常 InconsistentTypeCode。 org.omg.CORBA.portable 提供可移植性层,即可以使一个供应商生成的代码运行在另一个供应商 ORB 上的 ORB API 集合。 org.omg.CORBA.TypeCodePackage 提供用户定义的异常 BadKind 和 Bounds,它们将由 TypeCode 类中的方法抛出。 org.omg.CosNaming 为 Java IDL 提供命名服务。 org.omg.CosNaming.NamingContextExtPackage 此包包含以下在 org.omg.CosNaming.NamingContextExt 中使用的类: AddressHelper StringNameHelper URLStringHelper InvalidAddress 包规范 有关 Java[tm] Platform, Standard Edition 6 ORB 遵守的官方规范的受支持部分的明确列表,请参阅 Official Specifications for CORBA support in Java[tm] SE 6。 org.omg.CosNaming.NamingContextPackage 此包包含 org.omg.CosNaming 包的 Exception 类。 org.omg.Dynamic 此包包含 OMG Portable Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06 的第 21.9 小节中指定的 Dynamic 模块。 org.omg.DynamicAny 提供一些类和接口使得在运行时能够遍历与 any 有关联的数据值,并提取数据值的基本成分。 org.omg.DynamicAny.DynAnyFactoryPackage 此包包含 DynamicAny 模块的 DynAnyFactory 接口中的类和异常,该模块在 OMG The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的第 9.2.2 小节中指定。 org.omg.DynamicAny.DynAnyPackage 此包包含 DynAny 模块的 DynAnyFactory 接口中的类和异常,该模块在 OMG The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的第 9.2 小节中指定。 org.omg.IOP 此包包含在 OMG 文档 The Common Object Request Broker: Architecture and Specification http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 的 13.6.小节中指定的 IOP 模块。 org.omg.IOP.CodecFactoryPackage 此包包含 IOP::CodeFactory 接口中指定的异常(作为 Portable Interceptor 规范的一部分)。 org.omg.IOP.CodecPackage 此包根据 IOP::Codec IDL 接口定义生成。 org.omg.Messaging 此包包含 OMG Messaging Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?formal/99-10-07 中指定的 Messaging 模块。 org.omg.PortableInterceptor 提供一个注册 ORB 钩子 (hook) 的机制,通过这些钩子 ORB 服务可以截取执行 ORB 的正常流。 org.omg.PortableInterceptor.ORBInitInfoPackage 此包包含 OMG Portable Interceptor 规范 http://cgi.omg.org/cgi-bin/doc?ptc/2000-08-06 的第 21.7.2 小节中指定的 PortableInterceptor 模块的 ORBInitInfo 本地接口中的异常和 typedef。 org.omg.PortableServer 提供一些类和接口,用来生成跨多个供应商 ORB 的可移植应用程序的服务器端。 org.omg.PortableServer.CurrentPackage 提供各种方法实现,这些实现能够访问调用方法的对象的身份。 org.omg.PortableServer.POAManagerPackage 封装 POA 关联的处理状态。 org.omg.PortableServer.POAPackage 允许程序员构造可在不同 ORB 产品间移植的对象实现。 org.omg.PortableServer.portable 提供一些类和接口,用来生成跨多个供应商 ORB 的可移植应用程序的服务器端。 org.omg.PortableServer.ServantLocatorPackage 提供定位 servant 的类和接口。 org.omg.SendingContext 为值类型的编组提供支持。 org.omg.stub.java.rmi 包含用于 java.rmi 包中出现的 Remote 类型的 RMI-IIOP Stub。 org.w3c.dom 为文档对象模型 (DOM) 提供接口,该模型是 Java API for XML Processing 的组件 API。 org.w3c.dom.bootstrap org.w3c.dom.events org.w3c.dom.ls org.xml.sax 此包提供了核心 SAX API。 org.xml.sax.ext 此包包含适合的 SAX 驱动程序不一定支持的 SAX2 设施的接口。 org.xml.sax.helpers 此包包含“帮助器”类,其中包括对引导基于 SAX 的应用程序的支持。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧