UNPKG

node-web-mvc

Version:
109 lines (108 loc) 4.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.methodBeanNameSymbol = void 0; /** * @module DefaultListableBeanFactory * @description Ioc 容器 */ const BeanDefinition_1 = __importDefault(require("./BeanDefinition")); const AbstractBeanFactory_1 = __importDefault(require("./AbstractBeanFactory")); const BeanDefinitionOverrideException_1 = __importDefault(require("../../errors/BeanDefinitionOverrideException")); const RuntimeAnnotation_1 = __importDefault(require("../../servlets/annotations/annotation/RuntimeAnnotation")); const Bean_1 = __importDefault(require("../annotations/Bean")); const Scope_1 = __importDefault(require("../../servlets/annotations/Scope")); const Qualifier_1 = __importDefault(require("../annotations/Qualifier")); const InvalidBeanDefinitionException_1 = __importDefault(require("../../errors/InvalidBeanDefinitionException")); exports.methodBeanNameSymbol = Symbol('methodBeanNameSymbol'); class DefaultListableBeanFactory extends AbstractBeanFactory_1.default { constructor() { super(...arguments); /** * 已注册bean定义字典 */ this.beanDefinitions = new Map(); this.registerdBeanType = new Map(); this.allowBeanDefinitionOverridable = false; } containsBeanDefinition(beanName) { return !!this.getBeanDefinition(beanName); } /** * 根据bean名称获取对应的定义 * @param beanName bean类型 */ getBeanDefinition(beanName) { return this.beanDefinitions.get(beanName); } /** * 注册一个bean定义 * @param beanName bean名称 * @param beanDefinition bean定义 */ registerBeanDefinition(beanName, beanDefinition) { if (!(beanDefinition instanceof BeanDefinition_1.default)) { throw new InvalidBeanDefinitionException_1.default(beanDefinition); } const overrideDefinition = this.beanDefinitions.get(beanName); if (overrideDefinition && !this.isBeanDefinitionOverridable(beanName)) { throw new BeanDefinitionOverrideException_1.default(beanName, beanDefinition, overrideDefinition); } this.registerComponentBeanAnnotations(beanDefinition.clazz || beanDefinition.methodClazz); this.debug('Register Definition:', beanName); this.beanDefinitions.set(beanName, beanDefinition); } /** * 注册组件的Bean注解定义 * @param clazz */ registerComponentBeanAnnotations(clazz) { if (this.registerdBeanType.has(clazz)) { return; } this.registerdBeanType.set(clazz, true); const annotations = RuntimeAnnotation_1.default.getAnnotations(Bean_1.default, clazz); annotations.forEach((anno) => { var _a, _b; const scopeAnno = RuntimeAnnotation_1.default.getMethodAnnotation(clazz, anno.methodName, Scope_1.default); const qualifier = RuntimeAnnotation_1.default.getMethodAnnotation(clazz, anno.methodName, Qualifier_1.default); const scope = (_a = scopeAnno === null || scopeAnno === void 0 ? void 0 : scopeAnno.nativeAnnotation) === null || _a === void 0 ? void 0 : _a.scope; const name = ((_b = qualifier === null || qualifier === void 0 ? void 0 : qualifier.nativeAnnotation) === null || _b === void 0 ? void 0 : _b.value) || anno.methodName; const definition = new BeanDefinition_1.default(clazz, anno.method, scope); anno.method[exports.methodBeanNameSymbol] = name; this.registerBeanDefinition(name, definition); }); } isBeanDefinitionOverridable(beanName) { return this.allowBeanDefinitionOverridable; } setAllowBeanDefinitionOverridable(value) { this.allowBeanDefinitionOverridable = value; } /** * 移除一个bean定义 * @param beanName */ removeBeanDefinition(beanName) { if (this.containsBeanDefinition(beanName)) { this.debug('Remove Definition:', beanName); const definition = this.beanDefinitions.get(beanName); this.beanDefinitions.delete(beanName); return definition; } } /** * 获取所有已注册的bean定义key * @returns */ getBeanDefinitionNames() { return this.beanDefinitions.keys(); } destory() { super.destory(); this.beanDefinitions.clear(); } } exports.default = DefaultListableBeanFactory;