Java Spring整合Hibernate详细示例

Java Spring整合Hibernate详细示例
Java Spring整合Hibernate详细示例

Java Spring整合Hibernate详细示例

1. Spring整合Hibernate,主要是解决什么问题?

a、让spring提供的IOC容器来管理hibernate的SessionFactory

b、让Hibernate使用Spring提供的声明式事物

2. 整合步骤:

新建一个Java工程,并新建用来保存依赖jar包的lib目录

①. 加入Hibernate支持:

1. 加入Hibernate的required的jar包:

antlr-2.7.7.jar

dom4j-1.6.1.jar

hibernate-commons-annotations-4.0.2.Final.jar

hibernate-core-4.2.5.Final.jar

hibernate-jpa-2.0-api-1.0.1.Final.jar

javassist-3.15.0-GA.jar

jboss-logging-3.1.0.GA.jar

jboss-transaction-api_1.1_spec-1.0.1.Final.jar

2.加入MySQL与C3p0连接池支持:

c3p0-0.9.2.1.jar

mchange-commons-java-0.2.3.4.jar

MySQL-connector-java-5.1.7-bin.jar

注意:jar包加入之后,需要全部选中,右键-》BuildPath,将其导入

3.添加Hibernate的配置文件(hibernate.cfg.xml):

[html]view plain copy

print?

1.

2.

3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

4. "https://www.360docs.net/doc/d714269558.html,/hibernate-configuration-3.0.dtd">

5.

6.

7.

8.

9.

10.

11.org.hibernate.dialect.MySQL5Inno

DBDialect

12.

13.true

14.true

15.

16.update

17.

18.

19.

1.public class Book {

2.

3.private int id;

4.private String bookName;

5.private String isbn;

6.private float price;

7.private int stock;

8.

9.public int getId() {

10.return id;

11. }

12.

13.public void setId(int id) {

14.this.id = id;

15. }

16.

17.public String getBookName() {

18.return bookName;

19. }

20.

21.public void setBookName(String bookName) {

22.this.bookName = bookName;

23. }

24.

25.public String getIsbn() {

26.return isbn;

27. }

28.

29.public void setIsbn(String isbn) {

30.this.isbn = isbn;

31. }

32.

33.public float getPrice() {

34.return price;

35. }

36.

37.public void setPrice(float price) {

38.this.price = price;

39. }

40.

41.public int getStock() {

42.return stock;

43. }

44.

45.public void setStock(int stock) {

46.this.stock = stock;

47. }

48.

49.}

1.public class Account {

2.

3.private int id;

4.private String username;

5.private float balance;

6.

7.public int getId() {

8.return id;

9. }

10.

11.public void setId(int id) {

12.this.id = id;

13. }

14.

15.public String getUsername() {

16.return username;

17. }

18.

19.public void setUsername(String username) {

https://www.360docs.net/doc/d714269558.html,ername = username;

21. }

22.

23.public float getBalance() {

24.return balance;

25. }

26.

27.public void setBalance(float balance) {

28.this.balance = balance;

29. }

30.

31.}

1.

2.

DTD 3.0//EN"

3."https://www.360docs.net/doc/d714269558.html,/hibernate-mapping-3.0.dtd">

4.

5.

6.

>

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

1.

2.

DTD 3.0//EN"

3."https://www.360docs.net/doc/d714269558.html,/hibernate-mapping-3.0.dtd">

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

②. 加入Spring支持:

1. 加入Spring的required的jar包:

https://www.360docs.net/doc/d714269558.html,.sf.cglib-2.2.0.jar

https://www.360docs.net/doc/d714269558.html,.aopalliance-1.0.0.jar

https://www.360docs.net/doc/d714269558.html,.aspectj.weaver-1.6.8.RELEASE.jar

commons-logging-1.1.3.jar

spring-aop-4.1.0.RELEASE.jar

spring-aspects-4.1.0.RELEASE.jar

spring-beans-4.1.0.RELEASE.jar

spring-context-4.1.0.RELEASE.jar

spring-core-4.1.0.RELEASE.jar

spring-expression-4.1.0.RELEASE.jar

spring-jdbc-4.1.0.RELEASE.jar

spring-orm-4.1.0.RELEASE.jar

spring-test-4.1.0.RELEASE.jar

spring-tx-4.1.0.RELEASE.jar

spring-web-4.1.0.RELEASE.jar

spring-webmvc-4.1.0.RELEASE.jar

同样需要BuildPath!

2.加入Spring的配置文件:applicationContext.xml

1.

2.

3.xmlns:xsi="https://www.360docs.net/doc/d714269558.html,/2001/XMLSchema-instance"

4.xmlns:context="https://www.360docs.net/doc/d714269558.html,/schema/context"

5.xmlns:tx="https://www.360docs.net/doc/d714269558.html,/schema/tx"

6.xmlns:aop="https://www.360docs.net/doc/d714269558.html,/schema/aop"

7.xsi:schemaLocation="https://www.360docs.net/doc/d714269558.html,/schema/aop http://w

https://www.360docs.net/doc/d714269558.html,/schema/aop/spring-aop-4.1.xsd

8. https://www.360docs.net/doc/d714269558.html,/schema/beans http://www.springframe

https://www.360docs.net/doc/d714269558.html,/schema/beans/spring-beans.xsd

9. https://www.360docs.net/doc/d714269558.html,/schema/tx http://www.springframework

.org/schema/tx/spring-tx-4.1.xsd

10. https://www.360docs.net/doc/d714269558.html,/schema/context http://www.springfram

https://www.360docs.net/doc/d714269558.html,/schema/context/spring-context-4.1.xsd">

11.

12.

13.

ontext:component-scan>

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

>

24.

25.

26.

erty>

27.

rty>

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

58.

59.

60.

https://www.360docs.net/doc/d714269558.html,er=root

2.jdbc.password=root123

3.jdbc.driverClass=com.mysql.jdbc.Driver

4.jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring_hibernate

5.jdbc.initPoolSize=5

6.jdbc.maxPoolSize=10

至此,Spring的配置、Hibernate的配置、以及二者整合的相关配置都配置完毕。下面通过代码测试。

3.整合测试:

工程目录:

新建上述各个目录:

1. 在dao下面新建接口:

[java]view plain copy

print?

1.public interface BookShopDao {

2.

3./**

4. * 根据书号获取书的单价

5. * @param isbn

6. * @return

7. */

8.public float findPriceByIsbn(String isbn);

9.

10./**

11. * 更新书的库存,使书号对应的书本减少n本

12. * @param isbn

13. * @param n

14. */

15.public void updateBookStock(String isbn,int n);

16.

17./**

18. * 更新账户余额,使当前账户金额减少 price*n

19. * @param username

20. * @param price

21. * @param n

22. * @throws BalanceNotEnough

23. */

24.public void updateAccount(String username,float price,int n);

25.}

对应的在impl下完成上述接口的实现类(注解@Repository,用来标注持久层,同时表示此组件交给spring的IOC容器管理)

在使用spring的相关注解时,需要在spring的配置文件中开启注解自动扫描:[html]view plain copy

print?

1.

2.

1.import org.hibernate.Query;

2.import org.hibernate.Session;

3.import org.hibernate.SessionFactory;

4.import org.springframework.beans.factory.annotation.Autowired;

5.import org.springframework.stereotype.Repository;

6.

7.import com.elgin.spring.hibernate.dao.BookShopDao;

8.import com.elgin.spring.hibernate.exception.BalanceNotEnough;

9.import com.elgin.spring.hibernate.exception.BookStockNotEnoughException

;

10.

11.@Repository

12.public class BookShopDaoImpl implements BookShopDao {

13.

14.@Autowired

15.private SessionFactory sessionfactory;

16.

17./**

18. * 获取与当前线程绑定的session

19. * @return

20. */

21.private Session getSession(){

22.return sessionfactory.getCurrentSession();

23. }

24.

25.@Override

26.public float findPriceByIsbn(String isbn) {

27. String hql="select b.price from Book b where b.isbn=?";

28.float price=(float) getSession().createQuery(hql).setString(0, isbn).uniqu

eResult();

29.return price;

30. }

31.

32.@Override

33.public void updateBookStock(String isbn, int n) {

34.//验证书的库存是否充足

35. String hq="Select b.stock from Book b where b.isbn=?";

36.int stock=(int) getSession().createQuery(hq).setString(0, isbn).uniqueRes

ult();

37.if(stock < n){

38.throw new BookStockNotEnoughException("库存不足");

39. }

40. String hql="update Book b set b.stock=b.stock-? where b.isbn=?";

41. Query query=getSession().createQuery(hql).setInteger(0, n).setString(1, i

sbn);

42. query.executeUpdate();

43. }

44.

45.@Override

46.public void updateAccount(String username, float price, int n) {

47.//验证余额是否足够

48. String hql="select a.balance from Account a where https://www.360docs.net/doc/d714269558.html,ername=?";

49.float balance=(float) getSession().createQuery(hql).setString(0, usernam

e).uniqueResult();

50.if(balance < n*price){

51.throw new BalanceNotEnough("余额不足");

52. }

53. String hql1="update Account a set a.balance=a.balance-? where https://www.360docs.net/doc/d714269558.html,erna

me=?";

54. getSession().createQuery(hql1).setFloat(0, n*price).setString(1, username

).executeUpdate();

55. }

56.

57.}

1.public class BalanceNotEnough extends RuntimeException {

2.

3./**

4. *

5. */

6.private static final long serialVersionUID = 1L;

7.

8.public BalanceNotEnough(String msg) {

9.super(msg);

10. }

11.

12.}

1.public class BookStockNotEnoughException extends RuntimeException {

2.

3./**

4. *

5. */

6.private static final long serialVersionUID = 1L;

7.

8.public BookStockNotEnoughException(String msg) {

9.super(msg);

10. }

11.}

1.public interface BookShopService {

2.

3./** 用户购买n本书

4. * @param username

5. * @param isbn

6. * @param n

7. */

8.public void purchase(String username,String isbn,int n);

9.}

在service.impl下完成它的实现类(@Service 用来标注service层,表示此组件为service并交给Spring的IOC容器管理;@Autowired自动注入,表示此对象由IOC容器负责初始化并注入):

1.@Service

2.public class BookShopSeviceImpl implements BookShopService {

3.

4.@Autowired

5.private BookShopDao bookShopDao;

6.

7./**

8. * Spring Hibernate的事物流程

9. * 1、方法开始之前

10. * ①. 获取session

11. * ②. 把Session与当前线程绑定,这样就可以使用sessionFactory的

getCurrentSession()方法来获取session了

12. * ③. 开启事务

13. *

14. * 2、若方法正常结束,未出现异常,则

15. * ①.提交事物

16. * ②.把session与当前线程解除绑定

17. * ③.关闭session

18. *

19. * 3、若方法执行出现异常,则

20. * ①.回滚事务

21. * ②.把session与当前线程解除绑定

22. * ③.关闭session

23. */

24.@Override

25.public void purchase(String username, String isbn, int n) {

26.float price=bookShopDao.findPriceByIsbn(isbn);

27. bookShopDao.updateBookStock(isbn, n);

28. bookShopDao.updateAccount(username, price, n);

29. }

30.

31.}

1.@RunWith(SpringJUnit4ClassRunner.class)

2.@ContextConfiguration("classpath:applicationContext.xml")

3.public class SpringHibernateTest {

4.

5.

6.@Autowired

7.private BookShopService bookShopService;

8.

9.@Test

10.public void testPurchaseBook(){

11. bookShopService.purchase("aaa", "java-1122", 2);

12. }

13.

14.}

首先,注释掉测试方法中额外的代码,启动单元测试,让Hibernate生成用到的数据表:SH_BOOK 与SH_ACCOUNT

让后在2个表中各加入测试所需要的数据如下图:

运行上述单元测试方法,执行成功,查看数据库,book的库存STOCK变为43,account中的账户余额变为130.

再次运行,程序抛出异常:

com.elgin.spring.hibernate.exception.BalanceNotEnough: 余额不足

查看数据库发现:

book的库存STOCK仍旧为43,account中的账户余额仍旧为130.

这就是spring的事物的作用,程序出现异常,回滚事务,关闭session。

企业信息化如何进行资源整合

企业信息化如何进行资源整合 2010-07-06 13:45:52来源: e-works作者: 无跟贴0条 分享到: QQ空间新浪微博开心网人人网 在全球化和信息化的今天,信息的不对称性导致了企业的规模不同,人于人之间的地位不同,如何能让更多的信息为你所用是一个企业,一个人成功与否的关键,那么如何来汇聚更多的信息呢?如何利用更多的信息来帮助你决策呢? 1、平台的搭建是集中资源的基础保障 “得平台者得天下,平台为王”,其中的道理也是显而易见的。中国政府就是一个管理着960万平方公里的资源的平台,国美、苏宁这样的大卖场、大平台管理着几乎全球所有家电的销售,我们的企业有什么理由不建立一个自己的平台来管理和充分利用企业的资源呢?对制造企业而言,从订单的接受到产品交付以及售后服务,都需要一个平台来支撑,来管理,来统一调度资源,来支撑企业的持续发展,甚至于商业模式的改变。这样的平台就是ERP 系统。 企业的发展最重要的就是资源的合理配置和利用。第一:企业的资源包括人力资源、财力资源、信息资源,老板对企业的资源是否清楚是合理配置的前提。第二:实时的企业信息是决策者正确利用和配置资源的根本保障。试想,如果决策者都不知道企业现在的科研进度、生产进度以及核心人员的能力状况,试问决策者如何给你调配充分合理的资源?第三:企业信息化平台是领导决策利用的最可信的工具。所有的生产要素都是靠人来组织的,人是整个过程的核心元素,但是,人是感性的,人性是自私的,在某种情况下人是不可靠的。所以,ERP平台的透明性和流程化在企业管理中有着不可替代的作用,是决策者必不可少的工具。 2、企业信息化平台应该是高可用性、高集成性的管理平台 企业处于不同的阶段有不同的战略规划、盈利模式、管控模式。搞清楚企业的真实需求、发展瓶颈以及现阶段迫切需要解决的问题,决定企业是否实施信息化,那些方面先信息化,企业信息化集成度。 我国古代著名的军事理论家孙子说过:“夫未战而庙算胜者,得算多也;未战而庙算不胜者,得算少也。多算胜,少算不胜,而况于无算乎?吾以此观之,胜负见矣。”,意思就是说开战之前就预见能够取胜的,是因为筹划周密,胜利条件充分;开战之前就预见不能取胜的,是因为筹划不周,胜利条件不足。筹划周密、条件充分就能取胜;筹划疏漏、条件不

java基础知识

一.set,list 区别 List和Set都是接口。他们各自有自己的实现类, 有无顺序的实现类,也有有顺序的实现类。 最大的不同就是List是可以重复的。而Set是不能重复的。 List适合经常追加数据,插入,删除数据。但随即取数效率比较低。 Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。 二.ArrayList与LinkedList区别。 List: 有顺序的,元素可以重复 遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低轻量级线程不安全 遍历: ArrayList al=new ArrayList(); al.add("winsun"); al.add("weixin"); al.add("mybole"); for(int i=0;i

为什么要进行信息资源整合

为什么要进行信息资源整合 信息资源整合是指将某一范围内的,原本离散的、多元的、异构的、分布的信息资源通过逻辑的或物理的方式组织为一个整体,使之有利于管理、利用和服务。我们也可以这样来理解信息资源整合,就是把分散的资源集中起来,把无序的资源变为有序,使之方便用户查找信息、方便信息服务于用户。这也是广义的信息资源整合概念,它包含了信息采集、组织、加工以及服务等过程。 为什么要进行信息资源的整合? 整合究竟要解决什么问题? 这主要源于网络信息资源的激增,资源的种类越来越丰富,数据库和信息资源检索系统越来越多,检索方式、检索手段各式各样。造成了数据冗余、相互关联程度低,大量的信息孤岛出现,同时用户的检索负担也日益加重。因此,需要有一种手段把这些信息集中、整序、关联起来,把检索系统集成起来,使用户知道到哪里可以找到所需要的信息,怎样去查找这些信息,如何筛选检索结果,这就是信息资源整合的最终目的。 信息资源的整合方法、途径和手段多种多样,但一般来说包括三个层面:其一是数据层(又称资源层) ,即把有关信息资源集中为一体;第二是操作层(又称服务层或中间层) ,即通过软件或平台对有关信息资源进行统一利用;第三是系统层(又称应用层) ,即包含数据内容、软件系统以及基础设置的全面整合。信息服务部门需要根据自己的信息资源、应用系统状况以及硬件基础设施来确定整合层次和实施方案。 信息资源整合原则 信息资源整合是一个系统工程,如何在理论的指导和经验的驱使下,使信息资源的整合工程做到最优。还需要我们在数据整合工程的实施过程中遵循如下原则。 整体性原则 整体性又称完整性,就是在信息资源整合工程中要保持信息资源对象完整与全面。完整性主要体现在这样几个方面。 (1)根据服务的主要对象或服务目标,保证整合资源内容的和学科的完整性; (2)确保信息资源是一个整体,并不一定要求在物理上是一个整体,但需要将分布资源有机关联,揭示数据对象间的内在关系,在逻辑上形成一个整体; (3)用户界面的统一,即实现一站式检索; (4)系统功能的全面性,即要求整合后的资源系统能够涵盖原子系统的所有功能。 科学性原则 科学性原则主要是指对整合工程进行全面规划,科学论证,切忌匆忙上马,不宜随意凑合,要保证整合的合理性、科学性和规范化。具体在实施过程中要注意。 (1)资源选择的科学性,根据自己的服务对象和财力合理的规划、购买和自建资源,不能盲目求多,浪费人力财力; (2)整合资源组织的科学性,建立各类资源间的多重关联,科学地组织它们,将有限的资源产生出最大的知识和信息量; (3)整合后的系统在交互接口上的科学性,这个交互包括数据处理过程的后台交互,也包括用户和检索系统的交互,交互的科学性主要体现在处理接口的无缝连接,处理过程简洁快速,检索界面的方便有效。 层次性原则

Java中集合类用法总结

帮助 | 留言交? | 登录 首页我的图书馆主题阅读精彩目录精品文苑Tags 会员浏览好书推荐 以文找文 如何对文章标记,添加批注? Java 中集合?用法总结(转载) wade0564 收录于2010-07-08 阅读数:查看 收藏数:7 公众公开 原文来源 tags : java 集合类 欢迎浏览 wade0564 个人图书馆中收藏的文章,想收藏这篇好文章吗,赶快 吧,1分钟拥有自己的个人图书馆! 我也要收藏 举报 Java 中集合?用法总结 收藏 Collection ├List │├LinkedList │├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同 步,线程安全,空间用完时自动增长原容量一倍)│ └Stack └Set ├HashSet └TreeSet Map ├Hashtable ├HashMap ├WeakHashMap └TreeMap Map 接口: | + -- WeakHashMap: 以弱键 实现的基于哈希表的 Map 。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条 | 目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为 可终止的,被终 | 止,然后被回收。丢弃某个键时, 其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。此实现 | 不是同步的。 | + -- TreeMap:该映射根据其键的自然顺序进行 排序,或?根据创建映射时提供的 Comparator 进行 排序,具体取决于使用的 | 构造方法。此实现不是同步的。 | + -- HashMap:基于哈希表的 Map 接?的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了 | 非同步和允许 使用 null 之外,HashMap 类与 Hashtable ?致相同。)此类不保证映射的顺序,特别是它不保证该顺 | 序恒久不变。此实现不是同步的。 | +-- SortedMap: 进一步提供关于键的总体排序 的 Map 。该映射是根据其键的自然顺序进 行排序的,或?根据通常在创建有 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet 、keySet 和 values 方法返回 )进行迭代时,此顺序就会反映 出来。要采用此排序方式,还需要提供一些其他操作(此接?是 SortedSet 的对应映 射)。 Collection 接口: | 热点推荐 中国经典汤品——广东汤常用多音字汇总 如果你失恋。。。这些话...影响世界的100个管理定律汽车发动机?作过程和原理分析温家宝总理答中外记?问女人味,有多少男人可以读懂?珍稀的白头叶猴(组图)三鹿门事件之——中国,...国家公务员职务与级别当代古筝四美 付娜《渔...生活?秘方 真的很实用...哲理?品:守护梦想聚会时可以玩的?游戏依赖型人格障碍的表现和治疗经典妙语,十分精彩江边施救[贴图]李一男2003年在港湾...电脑速度慢的解决方法 ...重装系统后必须做的10件?事

企业信息资源整合与生存战略

企业信息资源整合与生存 战略 Ting Bao was revised on January 6, 20021

企业信息资源整合与生存战略 资源是企业未来生存战略的第二大因素。企业生存管理专家、企业未来生存管理理论创始人邓正红认为,企业未来生(本文来自博锐邓正红专栏)存是可控的,其中,环境是基础,资源是保证,文化是导向。企业未来生存就在于把握环境变化之“势”,在资源和企业文化之间求得平衡。企业在环境、资源和文化之间由平衡效应所产生的思维结果就是企业战略,企业战略开启企业未来生存之路。邓正红企业未来生存管理理论强调,在企业生存力及其形成过程中,企业资源潜力和企业资源整合力二者缺一不可。企业若缺乏一定数量与质量的资源,则企业资源整合力就显得无用武之地,企业也便有“巧妇难为无米之炊”的无奈;反之,企业资源再雄厚、再优越,资源潜力再大,若缺乏足够的资源(本文来自博锐邓正红专栏)配置力的激活和放大,也只能处于休眠状态,无法形成现实的竞争力。特别是对人力资源而言,若不能有效激发其积极性、自觉性与创造性,不能协调好各种人际关系,其结果就不仅仅是资源潜力难以发挥的问题了,它还会因为企业成员之间的有害冲突与矛盾而引起内耗,轻则增加企业的内耗成本,重则危及企业的生存。与企业资源潜力相比,企业资源整合力在企业生存力及其形成过程中的地位与作用更为重要与关键。特别是在科学技术(尤其是信息技术)飞速发展、物质生产力日益发达、市场机制和体系渐趋成熟和完善,以及社会文明与教育水平不断进步与提高的今天,企业要获得和拥有一定数量较高禀赋的(本文来自博锐邓正红专栏)相关资源并非难事,难的是如何有效激活和放大这些资源的潜力。换言之,当今企业缺乏的不是资源本身,而是资源整合力。按照新木桶原理,最缺乏的就是最关键的,如何提高资源整合力已愈来愈成为当今企业能否构建和提升其生存力的核心和关键。从邓正红对企业未来生存管理的研究来看,企业未来生存必经三个阶段,即以活得下为主导的环境生存阶段,以活得好为主导的基本生存阶段,以活得久为主导的核心生存阶段,这三个阶段分别对应三种生存境界,就是环境生存、物质生存、精神生存。企业如果只图现在活得下,就只要集中精力应对环境变化就行了;企业如果还想活得好些,就需要以充足的资源为保证,但资源不是无限(本文来自博锐邓正红专栏)的,需要不断地创新、整

数据信息资源整合研究与实践 周虹霞

数据信息资源整合研究与实践周虹霞 发表时间:2019-07-19T12:33:23.247Z 来源:《基层建设》2019年第12期作者:周虹霞 [导读] 摘要:随着信息技术的飞速发展,各类数据、信息资源急速膨胀,由于数据标准规范不统一、兼容性等各方面的问题,导致大量数据信息形成“信息孤岛”,不能及时有效的融合共享,使信息的开放利用、服务社会大打折扣。 中国国家博物馆北京 100006 摘要:随着信息技术的飞速发展,各类数据、信息资源急速膨胀,由于数据标准规范不统一、兼容性等各方面的问题,导致大量数据信息形成“信息孤岛”,不能及时有效的融合共享,使信息的开放利用、服务社会大打折扣。鉴于此,本文根据当前国家博物馆数据信息资源管理的现状,就解决信息资源整合、共享进行一些可行的研究。 关键词:数据信息;资源整合;元数据 前言 数据信息资源整合过程中最为常见、最为突出的就是数据兼容性问题。由于数据信息的来源和形成环境不一致,数据格式没有统一的标准,数据信息不能集中起来,容易形成“孤岛”,最终导致数据信息资源共享困难,进而影响其利用效果。 1数据信息资源整合途径 1.1统一资源管理软件平台 借助一款适合自身工作环境及情况的信息管理软件是一个较好的途径。长期以来,各单位依据自身的行业习惯、操作规程等条件自主建设软件是造成数据信息不兼容的主要原因之一。信息管理软件的数据库结构、设计模式、实现方法等都不一样,那么要避免数据库不兼容,采用统一的软件管理平台,无疑是最直接有效的办法。但是实施的难度较大,需要统一部署。随着信息技术、网络技术的发展,利用专网统一部署或统一软件平台,采用分布式系统来解决数据信息资源的兼容问题具有一定的可行性。 1.2统一数据格式标准 如果软件平台无法统一,可以尝试建立统一的数据库系统和接口及相关数据标准。数据库是数据资源与应用软件的基础支撑。虽然不同软件使用的数据库结构不一样,但各数据库之间的数据共享和导入、导出还是比较容易实现的。模式化存储数据信息的数据库结构,规范、统一数据字段、命名规范等细节,使得在数据库层面基本保持一致,预留标准统一的数据接口,那么即使软件在数据处理层面、操作层面和视觉层面有再大的差异,对数据信息的共享、利用、整合也不会带来很大影响。统一数据库格式标准对数据信息的利用和兼容性问题处理有着不可替代的作用,能给整合数据信息资源带来非常大的便捷。 1.3统一转换方式 统一转换方式对于解决数据信息兼容性问题有自身的优势,但也有一定的弊端,具有较大的风险性。因为这种方式具有依赖性,它依附于第三方软件,如果第三方软件出现问题,那么就会出现全盘崩溃的局面,会使我们陷入被动的局面,因而在使用中需要更加妥善的管理,并作出相应的灾害预案处置安排。 2数据信息资源现状 国家博物馆信息化建设过程中产生了大量的基础数据资源,数据涵盖国博业务相关的藏品、展览、科研、教育、考古、财务、人员等各方面,资源类型包括多媒体信息、文档信息、数值信息及其他类型。这些数据信息资源存储在各个应用系统中,分散管理。因此,有必要建立统一数据信息资源中心,实现国博信息资源共享和统一数据交换,提供统一的数据展现分析服务,以此提高业务水平和工作效率,为领导管理决策提供数据支撑。 2.1信息类型需求 根据对国博业务管理需求分析及应用领域界定,国博信息化建设对信息资源的需求可以分为基础业务信息、基本统计信息、动态信息、公众信息、服务信息、其他信息5类。 2.2数据资源整体规划 将国博数据资源按不同功能可划分为三大区域,分别是应用业务数据区域、管理数据区域和系统数据区域。 (1)业务数据:主要包括OA数据、邮箱数据、图片影像等多媒体数据、文档及各业务应用系统产生的数据等。 (2)管理数据:包括国博信息化管理所需的标准规范数据、决策分析数据等。 (3)系统数据:包括元数据、基础信息数据、信息资源目录数据。 3信息资源库建设 国博建设综合业务服务平台对应用系统进行整合,其中包含建设信息资源库系统平台。该平台的建设是在系统整合过程中对结构化与非结构化数据的收集、访问、管理、交换和集成,为各相对独立的业务应用(系统)的数据提供了统一的WEB入口和数据协同,它包括以下方面: (1)结构化数据集成:就是处理多个数据源多数据库之间的数据移动。采用的主要数据处理技术有数据复制、数据聚合和接口集成。 (2)非结构化数据包括图像、文档、网页和媒体等,它们的集成包括非结构化数据的管理、检索、分类、转换、共享、存档等多个方面。 3.1数据库设计 数据库及其应用的性能和调优建立在良好的数据库架构设计基础上。本项目建设应结合国博信息化资源的建设现状和未来发展,进行信息资源数据库的统一设计,包括数据库安全设计与用户权限设计、数据库管理和维护设计。 本系统后台数据库为关系型数据库ORACLE。在数据库开发过程中,要遵循数据库工程的方法和标准,尽可能减少反复。要有阶段性的规范化文档。要加强数据库日志管理,及时检查用户操作日志严防非法登陆。采用防病毒、防火墙、入侵检测等手段防止数据库信息泄露和损坏。加强数据库审计功能,设定审计规则并加强设计检查。 3.2元数据管理 元数据是描述数据库内数据的结构和建立方法的数据,重要的元数据包括数据源结构、目标数据库结构、数据转换规则等,应根据系统总体元数据标准进行元数据提取和著录,形成各共享数据集的元数据应用方案。数据库建设中,可将其按用途的不同分为三类,技术元

OracleAQ消息队列的使用详解

Oracle AQ 消息队列(-) 随着不同应用模块间的消息交互和通信成为一个关键的功能,并且变得越来越重要。Oracle 引入了一种强大的队列机制,通过它程序间可以实现信息的交互,oracle把它称作为AQ - Advanced Queuing. 使用Oracle AQ,我们不需要安装额外的中间件,它是Oracle数据库的一个功能组件,只要你安装了Oracle 数据库就可以使用AQ了。接下来分两部分来介绍AQ的使用,使用之前我们要创建QUEUE. 我们创建一个自己的AQ的管理角色"my_aq_adm_role" 和管理用户"aqadm",再把Oracle AQ 管理角色"aq_adminstrator_role" 授权给"my_aq_adm_role". CREATE ROLE my_aq_adm_role; GRANT aq_adminsistator_role TO my_aq_adm_role 创建一个用户的角色"my_aq_user_role" 和普通用户"aquser" ,再把Oracle AQ的用户角色"aq_user_role"和一些基本操作需要的系统权限授权给"my_aq_adm_role" CREATE ROLE my_aq_user_role; GRANT CREATE session, aq_user_role TO my_aq_user_role; EXEC DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE( privilege => 'ENQUEUE_ANY', grantee => 'my_aq_user_role', admin_option => FALSE); EXEC DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE( privilege => 'DEQUEUE_ANY', grantee => 'my_aq_user_role', admin_option = 'FALSE'); 现在我们创建AQ管理用户

数据结构(Java版)(第3版)叶核亚 答案之用队列编迷宫(部分1)

//用队列: public class Maze { public int[][] maze = null; public int[] xx = { 1, 0, -1, 0 }; public int[] yy = { 0, 1, 0, -1 }; public Queue queue = null; public Maze(int[][] maze) { this.maze = maze; queue = new Queue(maze.length * maze.length); } public void go() { Point outPt = new Point(4, 5); Point curPt = new Point(0, 0); Node curNode = new Node(curPt, null); maze[curPt.x][curPt.y] = 2; queue.entryQ(curNode); while (!queue.isEmpty()) { curNode = queue.outQ(); for (int i = 0; i < xx.length; ++i) { Point nextPt = new Point(); nextPt.x = (curNode.point).x + xx[i]; nextPt.y = (curNode.point).y + yy[i]; if (check(nextPt)) { Node nextNode = new Node(nextPt, curNode); queue.entryQ(nextNode); maze[nextPt.x][nextPt.y] = 2; if (nextPt.equals(outPt)) { //判断是否到达终点 Queue storeQueue=new Queue(maze.length * maze.length); storeQueue.entryQ(nextNode); while ((curNode = nextNode.previous) != null) { nextNode = curNode; storeQueue.entryQ(curNode); } System.out.println("A Path is:"); while (!storeQueue.isEmpty()) { curNode = storeQueue.outQ(); //出栈 System.out.println(curNode.point); } return; } } } } System.out.println("Non solution!");

信息资源整合中的风险及其防范策略

信息资源整合中的风险及其防范策略 卢加元 (南京审计学院,江苏南京,211815) [摘要]介绍了信息资源整合的概念和特征,以高校信息资源整合应用为例,从环境风险、管理风险、财务风险、技术风险、人员协调风险以及流程再造风险等几个方面,分析了信息资源整合所面临的风险,并对这些风险提出了防范措施。 [关键词]信息资源整合;风险;防范策略 随着高校信息化建设的不断深入,高校部门与部门之间信息共享和信息交换的需求越来越强烈,致使数据的共享问题日益突出。在此背景下,为了使信息资源的总体效能能得到充分发挥,一方面需要对各自为政的信息孤岛进行资源整合,另外一方面,由于信息系统的建设具有相当的不确定性,对各类信息资源的整合将导致新风险的出现。因此,研究信息资源的整合以及对其所产生的风险,具有相当重要的现实意义。 1、信息资源整合的含义 “整合”的英文是integration,其含义是整理、汇合、聚合、融合的意思。通常可理解为将看似无关、实则相关的事件,按照一定的规则,整理、集成为一个有机整体的过程或集合,形成一个有效的系统。 “信息资源”是信息系统在应用中,有关信息、信息技术、信息工作者和信息用户等的有机集合,涉及到信息采集、处理、加工、开发、传播和信息资源的利用等诸多要素。 “信息资源整合”是指对在不同区域、管理单元中分散存储和管理的各类信息资源, 通过一定的方法和手段,将其联结成一个结构有序、管理一体化、配置合理的有机整体的过程。 由上述的描述可见:“信息资源整合”是一种管理创新过程,其理念是以信息集合取代过去单纯的对信息进行管理的方式,主张对信息资源运用技术、经济、人文等手段进行统筹规划,实施全面管理。“整合”的目的是为了更好地实现资源的共享,其本质是站在机制创新的高度提出和解决信息资源建设问题。 2、信息资源整合中的风险 信息资源的整合往往涉及到学校内部业务流程的再造,需要学校、合作伙伴、国家相关职能部门等多个单位的共同参与,是一项复杂的系统工程,具有若干不确定因素,因而存在着许多风险。这些风险可能来自信息资源整合前、整合过程中以及整合过程以后,既有可能来自学校内部,也有可能来自学校外部。如果对此认识不清,对风险的处理不当,将会给高校的信息化应用带来许多负面影响。 下面从环境风险、管理风险、财务风险、技术风险、人员协调风险以及流程再造风险等几个方面,讨论高校信息资源整合中的风险。 (1)、环境风险 环境风险是指来自国家的政策、法规,学校的规定、体制的变革等给资源整合带来的风险。从宏观层面看,到目前为止,国家在信息资源整合方面还没有强制性的法规和比较全面的技术标准,因此,在某个具体的高校范围内实施资源整合是可行的,但从一个行业乃至国家信息化建设的层面看,仍然存在着各自为政的信息孤岛现象。对某个高校而言,如果今后遇到国家政策的调整,则本单位的信息资源整合也必将以失败告终。 (2)、管理风险 管理风险是指在资源整合项目过程中出现的风险,包括①高层战略风险。资源整合的指导思想、战略目标不清或有误等;②对资源整合调查不实所导致的风险。如:对信息资源特别是对现有在用的信息资源所存在的问题调查不全面等;③决策风险。不能清晰地描述资源

最精简的java 线程池与任务队列

以下资料为java培训为大家整理: 1 import java.util.*; 2 public class WorkQueue 3 { 4 private final int nThreads;//线程池的大小 5 private final PoolWorker[] threads;//用数组实现线程池 6 private final LinkedList queue;//任务队列 7 8 public WorkQueue(int nThreads){ 9 this.nThreads = nThreads; 10 queue = new LinkedList(); 11 threads = new PoolWorker[nThreads]; 12 13 for (int i=0; i

21 queue.addLast(r); 22 queue.notify(); 23 } 24 } 25 26 private class PoolWorker extends Thread {//工作线程类 27 public void run() { 28 Runnable r; 29 while (true) { 30 synchronized(queue) { 31 while (queue.isEmpty()) {//如果任务队列中没有任务,等待 32 try{ 33 queue.wait(); 34 }catch (InterruptedException ignored){} 35 } 36 r = (Runnable) queue.removeFirst();//有任务时,取出任务 37 } 38 try { 39 r.run();//执行任务 40 }catch (RuntimeException e) { 41 // You might want to log something here 42 }

信息技术资源整合讲义

信息技术资源整合讲义

教育信息化 教育信息化无疑是眼下教育领域的一个热点,其实教育信息化是指在教育领域运用计算机多媒体和网络信息技术,促进教育的全面改革,使之适应信息化社会对教育发展的新要求。 学校有一个梦想,建立一个仓库,里面装满了所有教师的教学智慧,让所有的人都能够共享这笔财富。当这个资源宝库得到充分利用时,学校的每位教师都得以从中汲取经验,丰富教学知识和教学手段,从而促使学校整体教学质量产生飞跃。为了实现这个梦想,几乎每所学校都尝试过建立自己的资源宝库,但由于种种客观条件的限制,类似的资源积累计划一直举步维艰。 现在,机遇出现了。随着信息技术的不断发展,教育开始向信息化转型。在国家的大力支持下,越来越多的学校建设了诸如校园网等硬件设施,这就让我们有机会利用信息技术重新启动资源积累计划。 一方面,目前有很多教育信息化的相关产品,毫无疑问,这些产品所拥有的功能必须有助于实现学校教学资源积累的目的。而且,需要注意的是,不仅要将教师的授课内容转化为学校教学资源,更重要的是实现教师的教学思想、教学方式的转化。例如,我们可以将教师的教学方法转化为一套模版,学校的其他教师能够方便地利用这些模块化的软件,按照自己的教学思路填充到自己的教学内容中。这个过程就是利用信息化手段完成了一次教学资源的积累。日积月累,这个资源宝库不仅能够让学校现有的教师和学生受益,而且能够让今后所有进入这所学校的师生持续受益,成为学校一笔永久的财富。 另一方面在于当学校建立起一套“合体”的信息化体系之后,随之而来的是对教师的培训。这是关键环节。在这里,懂得怎么使用各种信息技术工具是一个层次,而在实际教学工作中能够有意识地使用这些工具又是另一个层次。因此,一开始就需要以功能为导向而非以应用为导向。在这一点上,当教师真正体会到技术手段能够使其教学变得更加方便、有效的时候,就会对这种新的教学方式产生兴趣,从而主动学习、主动应用。 当教师能够真正利用各种信息技术手段来改变自己教学方式的时候,资源积累就会以一种全新的姿态出现,并且真正体现出它的价值——教学经验、教学成果不受时间、空间约束的最广泛的收集和传播。毫无疑问,随着信息技术的发展,以信息技术手段为支撑的资源积累将会极大地改变传统的教育观念,让人们树立一种判断学校质量的新标准。 随着科技的迅猛发展,目前一些陈旧的教学观念已不能指导对学生的授课模式。大力提倡发展校园信息化建设,其目的不仅仅在于使学校的师生都能掌握应用网络的技能,更重

JAVA版MQ_API使用说明

1综合前置MQ API(JA V A)使用说明 1.1消息接口MQApplicaiton 该接口用于普通消息的发送、接收以及同步接收和发送消息 接口方法: 1.1.1void open() 打开消息接口,之后可以进行消息发送和接收 1.1.2void close() 关闭接口,在消息接口使用完毕后需调用本方法关闭 1.1.3void send(byte[] data) 发送消息到消息队列,队列名在配置文件中指定 参数:data - 向队列中发送的数据 1.1.4void send(byte[] data, String messageId, String correlationId) 发送消息到消息队列,队列名在配置文件中指定。本方法指定消息标识和关联标识,以便根据这两个标识接收响应消息。这两个标识有接口调用者生成,需保证唯一性。 参数:data - 向队列中发送的数据 messageId - 消息标识,由接口调用者生成,需保证唯一性 correlationId - 关联标识,由接口调用者生成,需保证唯一性 1.1.5byte[] receive() 从队列中接收消息,队列名在配置文件中指定 返回值:接收到的数据

1.1.6byte[] receive(String messageId, String correlationId) 从队列中接收消息,队列名在配置文件中指定。本方法接收指定消息标识和关联标识的消息,用于在指定标识发送消息后,接收应答消息。 1.1.7byte[] invoke(byte[] data) 同步发送和接收消息,即在发送一条消息后立刻等待消息应答 参数:data - 发送的数据 返回值:接收到的应答数据 1.2文件传输接口MQFileTransmiiter 该接口用于文件的上传和下载 接口方法: 1.2.1void open() 打开文件传输接口,之后可以进行文件的上传和下载 1.2.2void close() 关闭文件传输接口,不在进行文件传输时需调用本方法关闭接口 1.2.3void get(String remote, String local) 从服务器下载文件 参数:remote - 远程服务器上的文件名 rocal - 下载后保存在本地的文件名 1.2.4void put(String local, String remote) 向服务器上传文件 参数:local - 要上传的本地文件的名称 Remote - 上传到服务器上文件的名称

浅议信息资源整合

科技信息2010年第13期 SCIENCE&TECHNOLOGY INFORMATION 随着现代科学技术的发展,信息资源的开发利用日益受到广泛重视。目前,信息资源的特点是数量大、种类多、来源广,特别是随着计算机的广泛使用和网络的逐步普及,现代提供文本复制的便利、自由发表的可能性,以及信息传输加强,使得人们面对的信息资源数量急剧增加。但是社会信息量的增长并不意味着用户获取信息的增长,恰恰相反,无序的信息资源不仅无助于信息资源的使用,反而会加剧增长与使用的矛盾。越来越多的人认识到,原始信息本身并不能产生价值,只有将其加以有效的组织,按特定的需要加以集中和揭示,才能产生价值。而要有效开发利用信息资源,必须采用相应的方法加以控制和处理,措施之一就是进行信息资源的整合。 近年来,国外对信息资源整合的理论基础,信息资源整合方法和技术进行了相应的研究。国内对信息资源整合进行了探索,范围主要包括:相关资源整合工具、产品、系统的介绍及比较;数字资源整合理论研究;数字资源整合技术研究。本文旨在通过分析国内外对信息资源整合理论、方法的研究,综合阐明了信息资源整合模式、整合方式和数字信息资源整合系统。 1信息资源整合模式 从目前的研究现状来看,国内外对信息资源整合模式的分析比较尚未有深入的分析研究。本文依据信息资源的存储与检索方式,将信息资源整合分为实体法与虚拟法两种模式。 1.1实体法模式 实体法整合是对现有的信息资源重新组织、深度加工、二次开发和创造新知识的过程。它需要建立一个新的存储仓库,将收集到的各种资源装入其中,不同结构的信息资源被组织为相同的数据格式,用统一的检索平台很容易地检索所有的信息资源。 实体法整合能够实现对传统文献资源的数字化处理,将数字化处理后的传统文献信息资源和原有数字信息资源整合,然后对数据优化选择,查重与去重,分类标引,统一规划,减少了原有数字信息资源占用的存储空间,使得机构内数字信息资源的数量和质量都得以提升。由于这种方法将所有的信息资源整合于同一系统内,资源维护方便,检索时系统反应迅速,从而提高了数字信息资源的共享和利用率。它的缺点是资源整合受条件限制,不能将所有的数字资源都进行实体整合。 1.2虚拟法模式 虚拟法整合是在不改变现有信息系统的数据组织结构和检索方法的条件下,实现对异构的多数据源统一的访问。虚拟法整合本身不建立资源库,而是以代理的角色接受用户的请求,通过中间件技术把查询请求转换成相应信息系统的查询语言和检索方法,分别发出检索请求,然后将各个系统返回的命中结果经过清洗、去重、归并等处理后在同一界面上呈现给用户。 虚拟法整合不需要重新处理原有的数字资源,数据提供商只需提供能够对其数据进行访问的接口。但是这种整合方法需要将用户的检索请求转换为各个系统的检索语言和检索方式,然后再实时地对从各个系统返回的检索结果进行处理之后呈现给用户,这势必造成检索反应速度的降低。而且,原有的一些信息系统由于不具有开放性设计,因此无法提供对其数据进行访问的接口。 综上,实体法和虚拟法各有优缺点,各适用于不同条件下的信息资源整合。因此,要根据实际情况选择适合的模式。鉴于目前我国信息资源规模,由于技术、能力、管理等方面的原因导致一些信息资源比较分散、数据冗余,系统集成度差、互联性差,以及数据的完整性、准确性、及时性等方面都存在较大差距。在这种情况下,应该首先对这些资源实施实体法整合,提高数据和系统的质量。如果信息资源比较完备、准确、及时,信息系统开放、互联性好,那么就可以选择虚拟法整合。 2信息资源整合方式 根据具体对象及过程的不同,可以将资源整合方式分为以下四种。 2.1基于OPAC系统的信息资源整合 基于OPAC的整合。它的实现有两种方法:一是通过执行Z39.50协议,聚合不同平台上的异构OPAC数据库,建立书目整合检索系统。二是利用数据商提供的MARC数据,根据图书馆制定的数字资源著录标准,将数字资源导入OPAC,形成实体和虚拟馆藏的书目整合检索系统。 2.2基于导航系统的信息资源整合 数字资源导航系统指将数字资源的检索入口整合在一起,建立数字资源导航库,提供按资源名、关键词、资源标识等获取数字资源的途径。数字资源导航系统功能主要是帮助用户更加全面了解数字资源,供用户浏览或按一定的特征来检索功能,并提供该资源的检索入口。为了使数字资源导航系统达到预期的功能,要确定揭示的内容。数字资源内容揭示的详细程度决定了数字资源导航系统的功能。每种形式类型的数字资源要揭示的内容是不同的。如数字期刊导航系统要揭示的内容包括刊名、关键词、学科分类、语种分类、出版商、ISSN、该刊的URL、出版商的URL、全文起始年限、期刊详细介绍等相关信息。数字资源导航系统一般都有以下几个基本功能:字顺浏览功能、分类浏览功能、关键词检索功能。这三个基本功能将帮助用户迅速找到数字资源,并利用超文本链接提供检索入口,对该数字资源进行检索。2.3基于链接系统的信息资源整合 利用网络超文本链接特性,可以将文献的有关知识点链接起来,达到将有关的数字资源链接在一起,形成一个具有内在联系的有机整体,以便用户更方便的利用数字资源的目的,这就是链接整合。链接整合主要通过以下方式实现。 2.3.1封闭式静态链接系统。这种链接系统的所有链接都存在本地数据之间(封闭式),而且所有链接都通过专门程序事先计算、并通过嵌入URL或存放于专门数据库的链接记录来表达(静态链接)。这种系统技术上主要解决各种链接数据的处理和链接数据库的管理,不涉及多个资源拥有者之间的互操作,链接准确性较高。 2.3.2开放式静态链接系统。主要解决如何为链接源中包含的别人拥有的链接对象提供链接,其技术方法主要是资源拥有者互相提供链接对象的标识符或URL,如全文出版商向文摘索引商提供期刊文章的标识符和URL,后者将标识符或URL嵌入自己的文摘索引数据中或记载在自己的链接数据库中,从而建立两者间链接。中国学术期刊网就利用了ElsevierScience电子期刊本身所有的一种开放式的URL,通过参考文献元数据项的分解组合得到和确定引文链接网络地址,从而实 浅议信息资源整合 李晓祎 (华北煤炭医学院图书馆河北唐山063000) 【摘要】通过分析国内外对信息资源整合理论、方法的研究,综合阐明了信息资源整合模式、整合方式和数字信息资源整合系统。 【关键词】信息资源整合;整合模式;整合方式;资源整合系统 Discussion on Information Resource Integration LI Xiao-yi (North China Coal Medical College,Tangshan Hebei,063000) 【Abstract】Thispaperdiscussesinformationresourcesintegratingmode,integratingmethodanddigitalinformationresourcesintegratingsystembyanalyzingforeignanddomesticinformationresourcesintegratingtheoryandmethod. 【Key words】Informationresourcesintegration;Integratingmode;Integratingmethod;Integratingsystem ○图书与档案○ 167

Java 的引用类使用指南

Java 的引用类使用(https://www.360docs.net/doc/d714269558.html,ng.ref包)指南 Java 2 平台引入了https://www.360docs.net/doc/d714269558.html,ng.ref 包,其中包括的类可以让您引用对象,而不将它们留在内存中。这些类还提供了与垃圾收集器(garbage collector)之间有限的交互。Peter Haggar 在本文中分析了SoftReference、WeakReference 和PhantomReference 类的功能和行为,并就这些类的使用给出了一些编程风格上的建议。 当在Java 2 平台中首次引入https://www.360docs.net/doc/d714269558.html,ng.ref 包(其中包含SoftReference、WeakReference 和PhantomReference 类)时,它的实用性显然被过分夸大了。它包含的类可能是有用的,但这些类具有的某些局限性会使它们显得不是很有吸引力,而且其应用程序也将特别局限于解决一类特定的问题。 垃圾收集概述 引用类的主要功能就是能够引用仍可以被垃圾收集器回收的对象。在引入引用类之前,我们只能使用强引用(strong reference)。举例来说,下面一行代码显示的就是强引用obj: 不会释放用来容纳该对象的存储空间。 当obj 超出范围或被显式地指定为null 时,垃圾收集器就认为没有对这个对象的其它引用,也就可以收集它了。然而您还需要注意一个重要的细节:仅凭对象可以被收集并不意味着垃圾收集器的一次指定运行就能够回收它。由于各种垃圾收集算法有所不同,某些算法会更频繁地分析生存期较短的对象,而不是较老、生存期较长的对象。因此,一个可供收集的对象可能永远也不会被回收。如果程序在垃圾收集器释放对象之前结束,这种情况就可能会出现。因此,概括地说,您永远无法保证可供收集的对象总是会被垃圾收集器收集。这些信息对于您分析引用类是很重要的。由于垃圾收集有着特定的性质,所以引用类实际上可能没有您原来想像的那么有用,尽管如此,它们对于特定问题来说还是很有用的类。软引用(soft reference)、弱引用(weak reference)和虚引用(phantom reference)对象提供了三种不同的方式来在不妨碍收集的情况下引用堆对象。每种引用对象都有不同的行为,而且它们与垃圾收集器之间的交互也有所不同。此外,这几个新的引用类都表现出比典型的强引用“更弱”的引用形式。而且,内存中的一个对象可以被多个引用(可以是强引用、软引用、弱引用或虚引用)引用。在进一步往下讨论之前,让我们来看看一些术语: 强可及对象(strongly reachable):可以通过强引用访问的对象。 软可及对象(softly reachable):不是强可及对象,并且能够通过软引用访问的对象。 弱可及对象(weakly reachable):不是强可及对象也不是软可及对象,并且能够通过弱引用访问的对象。 虚可及对象(phantomly reachable):不是强可及对象、软可及对象,也不是弱可及对象,已经结束的,可以通过虚引用访问的对象。 清除:将引用对象的referent 域设置为null,并将引用类在堆中引用的对象声明为可结束的。 SoftReference 类 SoftReference 类的一个典型用途就是用于内存敏感的高速缓存。SoftReference 的原理是:在保持对对象的引用时保证在JVM 报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取

相关文档
最新文档