我有一个包含注入和强制(最终)字段的类。对于common,我可以使用micronatBean factory . get bean(type)或BeanContext.getBean(type)从上下文中获取bean,但是在这种情况下,我必须传递类型和参数。
我为此创建了简单的测试
@MicronautTest
public class ETLExecutorTest {
@Inject
private MicronautBeanFactory micronautBeanFactory;
@Test
void testGetBean() {
Object[] args = new Object[] {"name", "spec", 1L};
ObjectInstance instance = micronautBeanFactory.getBean(ObjectInstance.class, args);
}
}
对象(bean)代码
@Prototype
public class ObjectInstance {
@Inject
private ObjectStorage objectStorage;
private final String name;
private final String spec;
private final Long id;
public ObjectInstance(String name, String spec, Long id) {
this.name = name;
this.spec = spec;
this.id = id;
}
}
当我运行它时,我收到异常
io . micro naut . context . exceptions . dependency injectionexception:无法为类com的参数[name]注入值。ObjectInstance消息:找到多个可能的bean候选项:[java.lang.String,java.lang.String,java.lang.String]采用的路径:在io . micron aut . context . abstractbeandition . getbeanforconstructorargument(abstractbeandition . Java:1016)处新建ObjectInstance([String name],String specName,Long accountId)。在io . micro naut . context . defaultbean context . docreate bean(defaultbean context . Java:1598)在io . micro naut . context . defaultbean context . getscopedbean for definition(defaultbean context . Java:2076)在io . micro naut . context . defaultbean context . getbean for definition(defaultbean context . Java:1991)在
我还试图做另一个测试,但在这种情况下,我接收的对象没有注入的字段
@MicronautTest
public class ETLExecutorTest {
@Inject
private BeanContext beanContext;
@Test
void testGetBean() {
Object[] args = new Object[] {"name", "spec", 1L};
BeanDefinition<ObjectInstance> definition = beanContext.getBeanDefinition(ObjectInstance.class);
ObjectInstance instance = definition.getConstructor().invoke(args); // there are no injections here: ObjectStorage of instance = null.
}
}
你能告诉我,我做错了什么吗???
micronaut
试图通过构造函数创建 Bean ObjectInstance
,但找不到要注入的 String 名称
,看起来它只是 ObjectInstance
的一个简单字段,在这种情况下,它按预期工作:
io . micro naut . context . exceptions . dependency injectionexception:无法为参数[name]注入值
如果您添加默认构造函数,则将创建 ObjectInstance
,您可以通过 beanContext.getBean(ObjectInstance.class) 获取 bean
:
@Prototype
public class ObjectInstance {
@Inject
private ObjectStorage objectStorage;
private String name;
private String spec;
private Long id;
public ObjectInstance() {}
public ObjectInstance(String name, String spec, Long id) {
this.name = name;
this.spec = spec;
this.id = id;
}
}
还要注意MicronautBeanFactory实现了ListableBeanFactory,这是为了与< code>Spring集成
附言:我建议您更改代码结构,POJO
不应包含bean
我需要动态创建和销毁 对象,以对应使用我的 Micronaut 应用程序注册/注销自己的客户端。作为其中的一部分,我想将它们作为 bean 添加到应用程序上下文中,以便它们在项目中也自动使用自定义 s。 我认为使用名为的bean方法来管理这些bean会非常简单,但这些API的行为方式让我感到困惑: 失败: 为什么bean是否存在很重要?我在努力创造它! 为什么它试图创造它?我只想找到它! (注。<
问题内容: 我有一个函数试图将文件加载到对象,因为示例项目是这样说的。 我尝试使用,但仍无法编译。 我是Java的新手,所以我知道自己做错了。 问题答案: 它无法编译,因为使用资源名称(a ,而不是a )作为参数,以便使用类加载机制(从类路径)加载资源。与一起使用是没有意义的。如果要打开文件,只需使用或即可。 请参阅http://docs.oracle.com/javase/6/docs/api/
我有两个应用程序: > 应用程序父应用程序:Spring Boot应用程序。将应用程序子级用作库。 是否可以加载XML中定义的所有bean,并将它们放入上下文中?
通常在Spring上下文中,如果原型bean被注入到单例bean中,父类的属性将重写原型bean作用域。但是,如果在原型bean作用域中注入一个单例作用域bean会发生什么。仍然使用内部bean的get bean会返回内部bean的新实例吗?
我想通过客户端注释获得HttpClient,因此由Micronaut管理。但是,这样我就不能使用属性文件中的url: 是否允许Micronaut管理HttpClient,同时仍然使用来自我的application.yml的url?
我有两个类(实际上是一个基类和许多其他类)。我希望获得子类中的父上下文,而不必每次都填充回< code>super()。它的基本目标是把我的角分量分成多个类。我会试着做一个例子 如您所见,我无法检索<code>这个。canvas并使用它,是否有任何解决方法。我知道我可以将画布传递到方法中,但我更希望像组件中一样使用<code>this<code>关键字来访问全局上下文。 所以基本上我想做的是: 任