Spring中有哪些bean

這篇文章主要講解了“Spring中有哪些bean”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Spring中有哪些bean”吧!

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的涪城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

@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無(wú)錫人流醫(yī)院哪家好 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

注冊(cè)bean

registry.registerBeanDefinition(railsDisbBeanName, railsDisbBeanDef)

其中 registry:

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

registry = beanFactory

感謝各位的閱讀,以上就是“Spring中有哪些bean”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Spring中有哪些bean這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁(yè)標(biāo)題:Spring中有哪些bean
分享URL:http://muchs.cn/article4/ihijie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、服務(wù)器托管用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司