這篇文章主要講解了“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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯