当前位置: 首页 > 知识库问答 >
问题:

如何在CDI(焊接)代理下更改实例(目标)而不重新创建代理

高森
2023-03-14

这是我之前的问题:如果一些注入的属性发生了变化,请重新注入CDI bean

同样,我使用的是CDI(焊缝),而不是Spring IoC,所以我不能使用Spring cloud config中的@refreshScope,但我认为我期望的功能可以与使用自定义范围类似。

共有1个答案

慕宏儒
2023-03-14

对于@DependedScoped bean,可以使用类MyBean{

   @Inject
   private Instance<MYType> myTypeInst;

   // This will ensure, that the bean is always fresh created.
   // But the property value on the former instance will be lost
   // So the changable value has to be provided another way to the created bean
   public void do SomeThing(){
      MyType bean = myTypeInst.get();

      myTypeInst.destroy(bean);
   }
}

如果您使用@depended作用域bean,那么您必须知道注入目标得到的实例是专门用于此bean的,那么谁在更改值呢?@Dependend范围对于您的用例来说是正确的范围吗?

应该没有必要提供自己的代理或侵入现有的代理,只需为您的用例找到合适的范围并正确地实现bean即可。如果连接url可以更改,那么管理连接的bean必须知道更改并重新创建连接,使用该bean的bean需要在每次使用该连接时检索该连接。

 类似资料:
  • 我有,和Eclipse Maven项目。 包含: 接口。 IMyConfig的实现。 实现,具有属性。 "空"文件。 一个的实现,标记为。 一个类(和方法),初始化Weld SE并检索一个bean。 一个,其中在部分中列出。 现在,我运行类,并且成功地检索了bean(作为实例)。但是这样的实例在其属性中被注入了实例,而不是替代版本() 我正在使用Eclipse Luna M2Eclipse。 我做

  • 问题内容: 他们如何在Java中创建代理。他们是根据需要创建代理,还是创建代理并将其永久保存。 问题答案: 您可以通过两种基本方式创建代理: 通过接口使用JDK机制。看一看。 在具体的类上使用一些字节码生成/操作库。看看cglib和javassist Apache有一个很好的实用程序:commons- proxy 。它包装了许多用于创建代理的机制和框架。 这全部与动态代理有关,即在运行时创建的代理

  • 我正在学习jboss Weld Event教程中的Weld Event,我想写一个观察事件并在事件被激发时打印helloword的示例。 这是我的代码: 它不起作用,给出以下异常信息: 容器中似乎没有可以初始化的bean 那么我该怎么做才能使它运行,我的beans.xml是空的 也许我应该在beans.xml中做些什么? 或者我应该编写一个实现事件接口的Java类? 任何内容都将适用。

  • 我已经创建了代理X,我如何在其中创建10个不同的代理?

  • 通常,当我在Kotlin代码中使用Java库中的注释时,我必须指定target以指定编译代码中必须注释的元素: 而不是指定,我希望能够简单地使用,特别是如果它发生在许多地方。 问题:有没有一种方法可以提示Kotlin编译器在所有位置使用不同的目标,这样如果我使用,它就会像处理一样处理它?或者有没有其他方法可以省略指定目标?如何实现这一目标?是否可以在编译阶段通过注释处理完成(像Lombok那样)?

  • 像这样上课: 有没有可能告诉Weld不要注射到c中?我可以否决使用事件的类: 但是B物体也不会被注射。我在搜索类似这样的东西:“如果类名是A,字段类型是C,那么省略注入。” 更具体地说,我希望HK2引擎注入“C”字段,问题是HK2和焊接都使用@注入注释。 我尝试了西利亚罗斯的解决方案。我找到了想要添加自定义注入实现的类型,比如: 在我添加了覆盖注入(…)在美国 比如: 在Manager eBVia