【发布时间】:2019-02-20 15:13:01
【问题描述】:
我对Spring不是很熟悉,遇到以下情况:
一个存储库类:
@Repository
public class MyRepository {
// ...
}
使用存储库类的类:
public class MyClass extends AbstractClass {
@Autowired
private MyRepository myRepository;
//...
}
我知道,如果我用@Component 注释我的MyClass 并将它与@Autowired 一起使用,那么@Autowired MyRepository 就可以很好地解决。
问题是我需要用反射创建MyClass 的新实例。所以MyRepository 永远不会被解析并且一直为空。
有没有办法在这种情况下使用@Autowired?
更好地解释我的情况:
我有一些AbstractClass 的实现。
在我的应用程序的设置阶段,我创建了这些实现的HashMap。基本上:
{"MyClass", MyClass.class}
//...
然后我有一个通用的Controller 映射到网址/{class}?options=...
使用{class}@PathVariable、上面的HashMap 和反射,我可以根据给定的options 创建一个类的实例(这部分很重要)。你们认为有更好的方法吗?
提前致谢
【问题讨论】:
-
您是如何通过反射创建
MyClass的新实例的?你能发布代码吗? -
嗨 Maruthi,这是一个简单的
map.get(className).newInstance() -
@JoãoMenighin 看了我的回答?对你有用吗?
-
Spring 不能以这种方式工作。
@Autowired是 Spring 创建的构造函数。你不能自己创建一个类的新实例并期望 Spring 注入它的@Autowired类
标签: java spring dependency-injection autowired