【问题标题】:Spring: force reload of a beanSpring:强制重新加载一个bean
【发布时间】:2018-02-17 00:52:08
【问题描述】:

我已经为此苦苦挣扎了一段时间,这让我发疯。 基本上我有一个bean定义如下:

<bean id="tipoUfficioGiudiziarioListImpl" singleton="false"
    class="java.util.ArrayList" >
</bean>

它基本上是一个表中所有条目的集合。现在的问题是这个bean是在服务器启动时加载的(或者如果我设置lazy-init="true"第一次使用)但是如果我在db上添加一个条目(通过应用程序本身或sql),bean不会重新加载并且使用集合时看不到新条目。

有没有办法强制它重新加载或使其无效,以便在下次首次使用时加载?

我使用的是 Spring 1.2

【问题讨论】:

  • 真正的缺陷,恕我直言,在于设计。您有动态数据(来自数据库),并将其映射到单个 Spring 对象。永远不会去上班。制作一个 Spring bean,它是一个能够通过方法调用获取(并缓存和更新)数据的服务。
  • 是的,我明白,这不是我的设计......在运行时广告条目的能力是我正在开发的功能,在它们通过 sql 直接添加之前(并且服务器可能每隔时间...)。现在,我当然可以在每次使用列表时手动加载它,但是,我希望让事情尽可能简单。还是谢谢你

标签: java spring collections javabeans reload


【解决方案1】:

也许,您想在每次使用时都实例化一个新的 bean 实例,您可以使用原型作用域来做到这一点吗? &lt;bean id = tipoUfficioGiudiziarioListImpl" class="java.util.ArrayList" scope = "prototype"&gt;?

【讨论】:

  • Itried 但我得到了这个错误:Attribute "singleton" must be declared for element type "bean" 我想这是因为我使用的是 spring 1.2 而不是 2.x
【解决方案2】:

你可以这样做:

@Aspect
@Component
public class DaoAspect {
    @Autowired
    TipoUfficioGiudiziarioListImpl impl;
    //your dao path,intercept your dao operation.
    @Before("execution(* com.test.dao..*.*(..))")
    public void doBeforeInServiceLayer(JoinPoint joinPoint) {
        /*

           TODO  some condition

       */      
        impl.loaddata();
    }
}

【讨论】:

  • 不幸的是,我现在无法使用 Skype :( 你能至少指出我正确的方向吗?
  • 好吧,我试着写。如果你想重新加载,弹簧有办法做到这一点,但它有点不专业。您可以在“tipoUfficioGiudiziarioListImpl”中编写一个加载数据的方法。
  • 是的,我可以做到,但是如何存储它来代替旧的呢?我已经能够在每次使用时加载“临时”,但我想做的是在添加/编辑/删除元素时重新加载它并忘记它。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
相关资源
最近更新 更多