当前位置: 首页 > 面试题库 >

Spring @Autowired在类新实例上

万勇
2023-03-14
问题内容

我对Spring不太熟悉,并且遇到以下情况:

存储库类:

@Repository
public class MyRepository {
    // ...
}

使用存储库类的类:

public class MyClass extends AbstractClass {

    @Autowired
    private MyRepository myRepository;

    //...
}

我知道,如果我用注释MyClass@Component与一起使用@Autowired,则@Autowired
MyRepository可以解决。问题是我处于一种需要创建MyClass带有反射的新实例的情况下。因此MyRepository永远不会解决,并且始终为null。

@Autowired 在这种情况下有没有办法使用?

更好地解释我的情况:我有一些实现AbstractClass。在我的应用程序的设置阶段,我将创建HashMap以下实现。基本上:

{"MyClass", MyClass.class}
//...

然后,我有了一个泛型Controller,可以/{class}?options=... 使用{class}
@PathVariableHashMap上面的内容和反射内容映射到url
,我可以根据给定的内容创建类的实例options(这部分很重要)。你们认为这样做有更好的方法吗?

提前致谢


问题答案:

Spring本身通过提供为你的对象做自动装配的一些功能,你创建new或者newInstance()或什么的。

要使用它,您需要AutowireCapableBeanFactory
通过Spring的常规依赖项注入获得@Autowired

@Autowired
private  AutowireCapableBeanFactory autowireCapableBeanFactory;

然后,使用其autowireBean(Object)方法将@Autowired属性注入到bean中。

Object myBean = map.get(className).newInstance();
autowireCapableBeanFactory.autowireBean(myBean);

设计说明:

如果您确实需要上述方法,请仔细考虑。Javadoc
AutowireCapableBeanFactory建议不要在大多数用例中使用此接口:

BeanFactory的此子接口不能在常规应用程序代码中使用:坚持使用BeanFactoryListableBeanFactory用于典型用例。

其他框架的集成代码可以利用此接口来连接和填充Spring无法控制其生命周期的现有bean实例。例如,这对于WebWork操作和Tapestry页面对象特别有用。



 类似资料:
  • 需要一些关于Spring自动装配和范围的帮助。 这是基本的应用程序结构: > CustomHttpClient由我的应用程序中的多个服务使用。每当我使用CustomHttpClient时,我都会通过以下方式自动连接该客户端的实例: 我使用拦截器修改CustomHttpClient中的一些变量,如下所示: 现在,问题来了。如果我按照上述方式设置了所有内容,那么每当我通过拦截器更改CustomHttp

  • 作为大多数Spring Boot新用户,我对@Autow的问题:D 我已经在这里阅读了大量有关此注释的主题,但仍然无法找到解决问题的正确方法。 假设我们有这个Spring Boot层次结构: 类,我们希望在每次调用时实例化它: Out get controller,它会在每个请求中创建新的SomeRepo对象: 最后,使用@Autowired创建TestWire实例的类: 假设我们多次向“/”发出

  • 这是给正儿八经的“Springers”们的问题... 我想使用MongoRepository。所以我去了Spring.io网站的MongoDB CRUD操作教程; 第一个问题是他们使用的是Spring Boot。第二个问题是他们在接口上使用。那个注释似乎可以创建一个对象(以后从这个对象调用方法...) 所以....我使用的是常规的spring MVC,而似乎在那里不起作用。 包含的类

  • 问题内容: 当我运行TaskJob时,我得到了空指针异常,因为Spring不会自动装配serviceJob服务。是新线程导致此问题,因为Spring自动连接mysqlService没有任何问题? 我的applicationContext.xml; 我的课是; 编辑: TaskJob实例化; 问题答案: Spring仅自动装配其创建的组件。您正在调用新的TaskJob(),Spring不知道该对象,

  • 我的情况是: 我正在构建一个Spring Boot应用程序,当我在控制器中自动连接UserRepository时,它会初始化它,当我尝试调用findByUserName方法时,一切都正常。 用户控制器 创建控制器后,我需要使用Spring Security来保护控制器的路径,因此我在SecurityConfig类中添加了以下配置: 安全配置 现在,当我尝试将请求发布到/登录路径时,我在Custom

  • 问题内容: 谁能告诉我如何从字符串创建Type的新实例?反映? 有示例,但它们适用于语言[:(]的旧版本(Go 1之前的版本) 问题答案: 因此,如果我正确理解了您的问题,那么您在问的是,仅将类型名称作为字符串时,如何创建对象。因此,例如,您可能有一个字符串“ MyStruct”,并且想要创建这种类型的对象。 不幸的是,这是不容易实现的,因为Go是一种静态类型的语言,并且链接程序将消除无效代码(或