我是spring及其概念的初学者。我试图使用@Configuration和package scan注释来扫描单个包下的一些bean提供程序类。当其中一个类的@Bean注释方法与另一个不同类的@Bean注释方法同名时,两个类都不会创建Bean。如果我将@bean注释的方法名称更改为未创建的bean的另一个名称,那么两个bean都会成功创建。无法理解这种行为。
@Configuration
public class ManagementHelperProvider {
@Bean
public ManagementHelper getInstance() {
return new ManagementHelper();
}
}
如果我正在创建另一个类,如顶部下面的Bean ManagementHelper,则不会创建。
@Configuration
public class ManagementValidatorProvider {
@Bean
public ManagementValidator getInstance() {
return new ManagementValidator();
}
}
如果我正在创建另一个类,如顶部下面的Bean ManagementHelper。
@Configuration
public class ManagementValidatorProvider {
@Bean
public ManagementValidator getInstanceTwo() {
return new ManagementValidator();
}
}
默认情况下,spring中的bean是单例的,只需要在上下文中定义一次。组件扫描将搜索所有文件。
不需要多次定义getInstance(),只需一次!为清晰起见,请将此方法重命名如下:
@Bean
public ManagementHelper getManagementHelperInstance() {
return new ManagementHelper();
}
在其他类中需要依赖它的地方,在类中添加以下内容作为成员变量
@Inject
ManagementHelper managementHelperInstance
如果您不想在多个位置(而不是单个位置)使用同一个ManagementHelper,那么将MangementHelper类注释为原型,这将在每个请求上创建一个新的bean实例,而不仅仅是返回相同的实例,即
@Scope("prototype")
public class ManagementHelper
由于您试图覆盖bean,它将引发异常
如果你还想这么做。
请参阅SetAllowBean定义覆盖-https://docs.spring.io/spring/docs/2.5.x/javadoc-api/org/springframework/beans/factory/support/DefaultListableBeanFactory.html#setAllowBeanDefinitionOverriding(布尔值)
或
您可以使用name属性简单地更改bean的名称
案例一:
bean1是用getInstance创建的。
使用相同名称getInstance和bean1创建的bean2被此覆盖。
案例2:
bean1是用getInstance创建的。
bean2是用getInstanceTo创建的。没有覆盖,因为名称没有冲突。
如果你
@Bean(name="bean1")
和
@Bean(name="bean2")
它也会起作用。
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
以上完全等同于以下appConfig.xml:
<beans>
<bean name="transferService" class="com.acme.TransferServiceImpl"/>
</beans>
这两种情况都将导致BeanFactory/Application ationContext中提供一个名为transferService的bean,绑定到TransferServiceImpl类型的对象实例:
transferService => com.acme.TransferService
我的问题是:为什么我不能自动连接我的地图与接口,而我可以与实现? 多谢了。
我的项目是一个Maven项目,具有以下依赖关系: 为了保持文章的简短性,我试图只放置相关的依赖项,避免其他的依赖项(Lombok、jpa等) 和我的graphqls文件(在参考资料文件夹中):
这是我的项目目录结构。 所有controller和其他类以及bean目录都在“WebPortalApplication”类下,正如Spring Boot doc所述,我们没有明确指定要扫描bean的包,只要这些包位于“main”类目录下,对吗?因此,当我运行“WebPortalApplication”文件时,它会生成,但有这样的例外。 @RestController公共类
我尝试了很多事情 be.fgov.minfin.virtualprinter.model.StatusMap中的字段statusDescriptionDao需要一个类型为
当我启动应用程序时,我得到以下错误:
我正在尝试在Swiftui2.0Xcode 12.4中创建一个WebView视图,但它太新了,我找不到答案和最佳实践的好例子。对于下面的代码,我得到以下错误。 类型SwiftUIWebView不符合协议UIView表示 此外,配置设置已更改,我无法启用。正确地允许使用JavaScript。尝试将其添加到“perfs”会触发一个错误,抱怨不喜欢Bool。