【发布时间】:2018-09-02 11:12:02
【问题描述】:
你能帮我摆脱ApplicationContext吗?
我有一个工厂,所以所有书籍实例都是 spring-beans。 我认为把所有的豆子都做成春豆子是一个不错的决定。
@Component
public class BookFactoryImpl implements BookFactory {
private final ApplicationContext applicationContext;
@Autowired
public BookFactoryImpl(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Override
public Book createBook(String name) {
return applicationContext.getBean(Book.class, name);
}
}
这是一个带有@Bean方法的配置类,用于实例化Book类的新实例:
@Configuration
@ComponentScan({"factory"})
public class AppConfig {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Lazy
public Book book(String name) {
return Book.builder().name(name).build();
}
}
这是我的Book实体类:
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
@Builder
public class Book {
@Id
@GeneratedValue
private int id;
@Basic(fetch = FetchType.LAZY)
private String name;
}
我还有一个想法 - 用 @Configuration 注释 BookFactoryImpl 并在其中移动 @Bean 方法,但在这种情况下,我的工厂将变成具有损坏生命周期的 @Configuration 类。
您认为,实现工厂的最佳方式是什么,以及如何减少像ApplicationContext 这样的外部依赖?
或者用@Bean方法将所有工厂都设为@Configuration类,你觉得怎么样?
【问题讨论】:
-
Book实例如何使用?什么叫BookFactory.createBook()? -
假设 psvm() 调用它。没关系,只是客户端代码
-
创建新 Book 实例的目的是什么?我猜你想把它们保存在数据库中?它们是否被存储库使用?
-
是的,例如,我可以持久化它们——它们是实体
标签: java spring spring-annotations factory-method spring-ioc