Не могли бы вы помочь мне избавиться от ApplicationContext
?
У меня есть фабрика, так что все экземпляры книг являются пружинными бобами. Я думаю, что это хорошее решение сделать все бобы весенними бобами.
@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;
}
У меня есть еще одна идея - аннотировать BookFactoryImpl
с помощью @Configuration
и переместить в него метод @Bean
, но в этом случае моя фабрика превратится в класс @Configuration
с нарушенным жизненным циклом.
Как вы думаете, как лучше всего реализовать фабрику и как уменьшить внешние зависимости, такие как ApplicationContext
?
Или, может быть, неплохо было бы сделать все фабрики @Configuration
классами с @Bean
методами, как вы думаете?
Book
? что звонитBookFactory.createBook()
? - person Adam Siemion   schedule 02.09.2018