Java Spring配置何时定义bean,何时定义new



我有一个配置类,我想知道我应该为每个类定义bean还是创建新的。

@Configuration
public class BookConfig {
@Bean
public Read readBook() {
return new ReadBook(new Operation(), new Library(new Location()));
}
}

@Configuration
public class BookConfig {
@Bean
public Operation operation() {
return new Operation();
}
@Bean
public Location location() {
return new Location();
}
@Bean
public Library library() {
return new Library(location());
}
@Bean
public Read readBook() {
return new ReadBook(operation(), library());
}
}

正确的方法是什么?

如果您不打算在任何时候使用Operation和Location bean,那么您可以跳过该bean的创建,并在第一个选项中使用new as。但如果您认为稍后会使用Operation和Location bean,那么第二种方法会更好。尽管我建议稍微修改一下。您不必调用方法,而是将bean本身作为方法参数传递。

@Configuration
public class BookConfig {
@Bean
public Operation operation() {
return new Operation();
}
@Bean
public Location location() {
return new Location();
}
@Bean
public Library library(Location location) {
return new Library(location);
}
@Bean
public Read readBook(Location location, Library library) {
return new ReadBook(location, library);
}
}

根据经验,请始终记住,任何制作成Bean的内容都将由Spring引导上下文本身管理。任何你宣称自己是";新的";将不由spring-boot管理,并将被视为普通的java对象。

默认情况下,Beans将是单例的,并且所有的生命周期方法都在其上运行(除其他外(。在启动时创建Spring引导上下文期间,bean依赖关系将得到解决,并且您必须以这样一种方式设计类,即不存在循环依赖关系问题。

如果你做一个";新的";那么这些对象的作用域将被限制在该类的特定实例中,并且一旦该实例被垃圾回收,就会随该实例一起销毁。

最新更新