免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Spring中有哪些bean-創新互聯

這篇文章主要講解了“Spring中有哪些bean”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring中有哪些bean”吧!

創新互聯公司-專業網站定制、快速模板網站建設、高性價比扎賚特網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式扎賚特網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋扎賚特地區。費用合理售后完善,十多年實體公司更值得信賴。

  Spring中有兩種bean, 用的最多的是 annotationBean,但是對于一些客制化的需求,可以使用 factoryBean, 它提供了三個接口

  @Nullable

  T getObject() throws Exception;

  @Nullable

  Class getObjectType();

  default boolean isSingleton() {

  return true;

  }

  定義

  @Component

  class AutoMoneyHouseExtApiProxyCreator : BeanFactoryPostProcessor {

  private val logger: Logger = LogManager.getLogger()

  override fun postProcessBeanFactory(beanFactory: ConfigurableListableBeanFactory) {

  ServiceProvider::class.java.declaredFields.filter {

  it.isEnumConstant && it.isAnnotationPresent(Rail::class.java)

  }.forEach {

  val railId = it.getAnnotation(Rail::class.java).id

  val provider = it.get(null) as ServiceProvider

  createApiProxy(railId, provider, beanFactory as BeanDefinitionRegistry)

  }

  }

  private fun createApiProxy(railId: String, provider: ServiceProvider,

  registry: BeanDefinitionRegistry) {

  logger.info("auto-generate api proxy for: {}", provider)

  val mhId = provider.providerName

  // Payment API

  if (provider.services.contains(Service.PAYMENT)) {

  val railsDisbBeanDef = BeanDefinitionBuilder.rootBeanDefinition(DisbursementRpcServiceProxyFactoryBean::class.java)

  .addConstructorArgValue(railId)

  .addConstructorArgValue(mhId)

  .beanDefinition

  val railsDisbBeanName = "rails-disb-${provider.name}"

  registry.registerBeanDefinition(railsDisbBeanName, railsDisbBeanDef)

  val paymentBeanDef = BeanDefinitionBuilder.rootBeanDefinition(DisbursementCPAPIImpl::class.java)

  .addConstructorArgValue(mhId)

  .addConstructorArgReference(railsDisbBeanName)

  .addConstructorArgValue(provider)

  .beanDefinition

  registry.registerBeanDefinition(Service.PAYMENT.name + "-" + provider.name, paymentBeanDef)

  }

  // Balance API

  val railsBalBeanDef = BeanDefinitionBuilder.rootBeanDefinition(AccountBalanceRpcServiceProxyFactoryBean::class.java)

  .addConstructorArgValue(railId)

  .addConstructorArgValue(mhId)

  .beanDefinition

  val railsBalBeanName = "rails-bal-${provider.name}"

  registry.registerBeanDefinition(railsBalBeanName, railsBalBeanDef)

  val balanceBeanDef = BeanDefinitionBuilder.rootBeanDefinition(BalanceAPIServiceAdapter::class.java)

  .addConstructorArgValue(mhId)

  .addConstructorArgReference(railsBalBeanName)

  .beanDefinition

  registry.registerBeanDefinition("BALANCE-" + provider.name, balanceBeanDef)

  }

  }

  class DisbursementRpcServiceProxyFactoryBean(private val railId: String, private val mhId: MoneyHouseID)

  : FactoryBean {

  @Autowired

  lateinit var restTemplate: RestTemplate

  @Value("\${application.railsGateway.url}")

  var railsGatewayUrl: String = ""

  override fun getObject(): DisbursementRpcService {

  val client = JsonRpcRestClient(URL(URL(railsGatewayUrl), railId + DisbursementRpcService.SERVICE_PATH),

  Codecs.NO_NULL_FIELD_ORDERED_MAPPER, restTemplate,

  mapOf("mhId" to mhId))

  return ProxyUtil.createClientProxy(javaClass.classLoader, DisbursementRpcService::class.java, client)

  }

  override fun getObjectType() = DisbursementRpcService::class.java

  }

  class AccountBalanceRpcServiceProxyFactoryBean(private val railId: String, private val mhId: MoneyHouseID)

  : FactoryBean {

  @Autowired無錫人流醫院哪家好 http://www.ytsg029.com/

  lateinit var restTemplate: RestTemplate

  @Value("\${application.railsGateway.url}")

  var railsGatewayUrl: String = ""

  override fun getObject(): AccountBalanceRpcService {

  val client = JsonRpcRestClient(URL(URL(railsGatewayUrl), railId + AccountBalanceRpcService.SERVICE_PATH),

  Codecs.NO_NULL_FIELD_ORDERED_MAPPER, restTemplate,

  mapOf("mhId" to mhId))

  return ProxyUtil.createClientProxy(javaClass.classLoader, AccountBalanceRpcService::class.java, client)

  }

  override fun getObjectType() = AccountBalanceRpcService::class.java

  }

  使用

  @Target(AnnotationTarget.FIELD)

  annotation class Rail(val id: String)

  enum class ServiceProvider constructor(val providerName: String, vararg list: Service) {

  @Rail("ttt") TTTT(MHHIDs.TTTT, Service.CONVERSION, Service.PAYMENT)

  val services: Array = arrayOf(*list)

  }

  精髓

  生成beanDef:

  BeanDefinitionBuilder.rootBeanDefinition(DisbursementRpcServiceProxyFactoryBean::class.java)

  .addConstructorArgValue(railId)

  .addConstructorArgValue(mhId)

  .beanDefinition

  注冊bean

  registry.registerBeanDefinition(railsDisbBeanName, railsDisbBeanDef)

  其中 registry:

  void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

  registry = beanFactory

感謝各位的閱讀,以上就是“Spring中有哪些bean”的內容了,經過本文的學習后,相信大家對Spring中有哪些bean這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

本文標題:Spring中有哪些bean-創新互聯
鏈接地址:http://m.newbst.com/article22/coeijc.html

成都網站建設公司_創新互聯,為您提供小程序開發網站內鏈響應式網站營銷型網站建設搜索引擎優化網站排名

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發