第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創(chuàng)建帶參數(shù)的工廠方法?

如何創(chuàng)建帶參數(shù)的工廠方法?

哈士奇WWW 2021-08-25 17:20:16
你能幫我擺脫ApplicationContext嗎?我有一個工廠,所以所有的書實例都是 spring-beans。我認為把所有的豆子都做成春豆是一個很好的決定。@Componentpublic 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@Builderpublic class Book {    @Id    @GeneratedValue    private int id;    @Basic(fetch = FetchType.LAZY)    private String name;}我有更多的一個想法-注釋BookFactoryImpl與@Configuration和移動@Bean在它的方法,但在這種情況下,我廠將變成@Configuration類破碎的生命周期。你怎么看,實現(xiàn)工廠的最佳方式是什么,以及如何減少外部依賴,比如ApplicationContext?或者把所有的工廠都做成@Configuration帶有@Bean方法的類是很好的,你怎么看?
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

不,讓應(yīng)用程序中的每個類都由 Spring 管理并不是一個好主意。

JPA 實體通常應(yīng)該由 Spring 托管 bean 中的代碼實例化


查看完整回答
反對 回復(fù) 2021-08-25
?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

我通常使用以下方法:


定義將包含對工廠的依賴的單例 bean:


    public class MyService {

     private final Provider<Book> bookFactory;


     public MyService(Provider<Book> bookFactory) {

         this.bookFactory = bookFactory;

     } 

     public void doSomething() {

        Book book = bookFactory.get();

        book.setNumberOfReaders(numOfReaders); // this is a drawback, book is mutable, if we want to set runtime params (like numberOfReaders)

         ....

      }

    }

現(xiàn)在為 book bean 定義一個原型:


@Configuration 

public class MyConfiguration {


   @Bean

   @Scope("prototype")

   public Book book(...) {

      return new Book(...);

   }


   @Bean // scope singleton by default

   public MyService myService(Provider<Book> bookFactory) {

       return new MyService(bookFactory);

   }

}

注意,Provider 的類型是“javax.inject.Provider”,為了使用 id,導(dǎo)入(例如在 maven 中):


<dependency>

   <groupId>javax.inject</groupId>

   <artifactId>javax.inject</artifactId>

   <version>1</version>

</dependency>

Spring 可以處理這個,因為 4.x(我猜是 4.1)而不需要任何額外的配置


當然,這種方法消除了將應(yīng)用程序上下文注入工廠的需要,并且通常需要維護工廠


一個缺點是它不允許使用參數(shù)構(gòu)建對象,這些參數(shù)必須在運行時指定。


還有另一種方法,運行時生成子類并結(jié)合@Lookup注釋,這里描述了它,但 IMO Provider 方法更好。


查看完整回答
反對 回復(fù) 2021-08-25
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號