将 `@Configuration` bean 用作普通 bean 是一种好习惯吗?
Is it good practice to use a `@Configuration` bean as a normal bean?
在spring中,我们可以将class标记为@Configuration
,并使用它来配置bean。
但是bean也可以作为普通bean使用,看例子:
@Configuration
@EnableCaching
public class CacheConfig {
private List<GuavaCache> caches = Collections.emptyList();
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(caches);
return cacheManager;
}
public String statistics() {
StringBuilder sb = new StringBuilder();
for (GuavaCache cache : caches) {
sb.append(cache.statistics()).append("\n");
}
return sb.toString();
}
}
你可以看到我们在这个 CacheConfig
中配置了一个 CacheManager
bean,但它还包含一个普通的 statistics
方法,我们可以引用这个 bean 并调用它。
我只是想知道是否推荐使用@Configuration
class?
就我个人而言,我会避免使用它,因为它混合了两种职责,"creating beans"、"providing some business logic"。我更喜欢创建另一个用于统计的bean(以下代码可能不正确,仅用于演示)。
@Configuration
@EnableCaching
public class CacheConfig {
private List<GuavaCache> caches = Collections.emptyList();
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(caches);
return cacheManager;
}
@Bean
public CacheStatistics cacheStatistics() {
return new CacheStatistics(caches);
}
}
class CacheStatistics {
private List<GuavaCache> caches;
public CacheStatistics(List<GuavaCache> caches) {
this.caches = caches;
}
public String statistics() {
StringBuilder sb = new StringBuilder();
for (GuavaCache cache : caches) {
sb.append(cache.statistics()).append("\n");
}
return sb.toString();
}
}
基本上我们使用@Configuration 来替换。xml 文件中的spring.This 文件不用于放置业务逻辑
所以我们需要注意如果我们使用 @Configuration 我们只是用它来声明 beans.I 不要认为我们把其他东西放在那里很好。
谢谢,
喜满树
在spring中,我们可以将class标记为@Configuration
,并使用它来配置bean。
但是bean也可以作为普通bean使用,看例子:
@Configuration
@EnableCaching
public class CacheConfig {
private List<GuavaCache> caches = Collections.emptyList();
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(caches);
return cacheManager;
}
public String statistics() {
StringBuilder sb = new StringBuilder();
for (GuavaCache cache : caches) {
sb.append(cache.statistics()).append("\n");
}
return sb.toString();
}
}
你可以看到我们在这个 CacheConfig
中配置了一个 CacheManager
bean,但它还包含一个普通的 statistics
方法,我们可以引用这个 bean 并调用它。
我只是想知道是否推荐使用@Configuration
class?
就我个人而言,我会避免使用它,因为它混合了两种职责,"creating beans"、"providing some business logic"。我更喜欢创建另一个用于统计的bean(以下代码可能不正确,仅用于演示)。
@Configuration
@EnableCaching
public class CacheConfig {
private List<GuavaCache> caches = Collections.emptyList();
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(caches);
return cacheManager;
}
@Bean
public CacheStatistics cacheStatistics() {
return new CacheStatistics(caches);
}
}
class CacheStatistics {
private List<GuavaCache> caches;
public CacheStatistics(List<GuavaCache> caches) {
this.caches = caches;
}
public String statistics() {
StringBuilder sb = new StringBuilder();
for (GuavaCache cache : caches) {
sb.append(cache.statistics()).append("\n");
}
return sb.toString();
}
}
基本上我们使用@Configuration 来替换。xml 文件中的spring.This 文件不用于放置业务逻辑
所以我们需要注意如果我们使用 @Configuration 我们只是用它来声明 beans.I 不要认为我们把其他东西放在那里很好。
谢谢, 喜满树