Java:更改堆上的对象引用?

时间:2010-08-24 14:19:06

标签: java reference heap

想知道是否有办法更改其他对象引用的堆上的对象。

我特意尝试的是管理我的瞬态配置。我正在做的是从JAXB或JPA加载“绑定”配置。我有一个管理器维护一些线程来检查这些配置存储是否发生变化。如果他们这样做,我希望再次从商店加载配置(创建配置的新实例)并使用堆上的新实例替换“陈旧”配置实例,因此任何引用配置数据的对象都将获得最新的

我理解我可能会因为必须处理分层对象引用而陷入噩梦 - 但我只是想在我决定简单地记录不创建本地引用并始终从中调用之前了解各种潜在方法配置管理器,如果你期望最新的=)

任何想法如何做到这一点?我对AOP并不太熟悉......但是从我对它的了解......我认为这可能提供了实现这一目标的途径。

欢迎任何其他想法,当然=)

史蒂夫

2 个答案:

答案 0 :(得分:3)

我对JAXB或JPA一无所知,但这就是我要做的。为各种对象提供对config的包装器的引用。然后,您可以更新配置(以同步方式),而无需更改这些引用:

interface Config { String getSomeProperty(); }

class ConcreteConfig implements Config{
    public String getSomeProperty() {
        return "some value";
    }
}

class ConfigWrapper implements Config {
    private Config backing;
    private ReadWriteLock lock = new ReentrantReadWriteLock();

    public void setBacking(ConfigBacking backing) {
        try {
            lock.writeLock().lock();
            this.backing = backing;
        } finally {
            lock.writeLock().unlock();
        }
    }

    @Override
    public String getSomeProperty() {
        try {
            lock.readLock().lock();
            return backing.getSomeProperty();
        } finally {
            lock.readLock().unlock();
        }
    }
}

然后你只会分发ConfigWrapper的实例,并且可以随时自由地重新分配后备对象。

答案 1 :(得分:0)

您可以查看Spring framework。如果我的记忆服务,它支持类似的东西(也许this?)。