Spring @Autowired在一个与当前类同名的类上

时间:2016-10-03 09:19:41

标签: java spring spring-boot

说我在Spring启动应用程序中有以下类:

@Configuration
public class Environment {
    @Autowired
    org.springframework.core.env.Environment environment;
}

运行时,我得到:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field environment in com.example.Environment required a bean of type 'org.springframework.core.env.Environment' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.core.env.Environment' in your configuration.

Disconnected from the target VM, address: '127.0.0.1:57780', transport: 'socket'

解决此问题的解决方法是将我的班级从public class Environment重命名为public class Environments

但我不想这样做。如何保留我的班级名称,让Spring知道我想要做什么?

2 个答案:

答案 0 :(得分:5)

您应该为您的配置命名:

@Configuration(value = "myEnviroment")
public class Environment {}

来自@Configuration文档,关于value

  

显式指定关联的Spring bean定义的名称        使用此Configuration类。 如果未指定(常见情况),        将自动生成一个bean名称。        仅当通过以下方式获取Configuration类时,自定义名称才适用        组件扫描或直接提供给AnnotationConfigApplicationContext。

修改:

使用@Qualifier注释在您的应用程序中自动装配此bean时使用相同的名称,如下所示:

@Autowired @Qualifier("myEnvironment")
private Environment environment;

答案 1 :(得分:0)

您可以为您的类指定bean名称,并为新bean自动装配,最后您将自动装配到bean的类

      @Autowire("newname")