use of com.blade.ioc.bean.BeanDefine in project blade by biezhi.
the class BeanDefineTest method testBeanDefine2.
@Test
public void testBeanDefine2() {
BeanDefine beanDefine = new BeanDefine(new BladeBeanDefineType(), BladeBeanDefineType.class);
assertEquals(BladeBeanDefineType.class, beanDefine.getType());
beanDefine = new BeanDefine(new BladeBeanDefineType(), BladeBeanDefineType.class, true);
assertEquals(BladeBeanDefineType.class, beanDefine.getType());
assertEquals(true, beanDefine.isSingleton());
}
use of com.blade.ioc.bean.BeanDefine in project blade by biezhi.
the class SimpleIoc method createBean.
@Override
public Object createBean(Class<?> type) {
BeanDefine beanDefine = createBeanDefine(type, true);
IocKit.initInjection(this, Objects.requireNonNull(beanDefine));
IocKit.injectionValue(WebContext.blade().environment(), beanDefine);
return beanDefine.getBean();
}
use of com.blade.ioc.bean.BeanDefine in project blade by biezhi.
the class SimpleIoc method put.
/**
* Register @Bean marked objects
*/
private Object put(String name, Class<?> beanClass, boolean isSingleton) {
BeanDefine beanDefine = this.createBeanDefine(beanClass, isSingleton);
if (pool.put(name, beanDefine) != null) {
log.warn("Duplicated Bean: {}", name);
}
// add interfacećput to pool
Class<?>[] interfaces = beanClass.getInterfaces();
if (interfaces.length > 0) {
for (Class<?> interfaceClazz : interfaces) {
if (null != this.getBean(interfaceClazz)) {
break;
}
this.put(interfaceClazz.getName(), beanDefine);
}
}
return Objects.requireNonNull(beanDefine).getBean();
}
use of com.blade.ioc.bean.BeanDefine in project blade by biezhi.
the class NettyServer method initIoc.
private void initIoc() {
RouteMatcher routeMatcher = blade.routeMatcher();
routeMatcher.initMiddleware(blade.middleware());
routeBuilder = new RouteBuilder(routeMatcher);
blade.scanPackages().stream().flatMap(DynamicContext::recursionFindClasses).map(ClassInfo::getClazz).filter(ReflectKit::isNormalClass).forEach(this::parseAndCreate);
routeMatcher.register();
this.loaders.stream().sorted(new OrderComparator<>()).forEach(b -> b.preLoad(blade));
this.processors.stream().sorted(new OrderComparator<>()).forEach(b -> b.preHandle(blade));
Ioc ioc = blade.ioc();
if (BladeKit.isNotEmpty(ioc.getBeans())) {
log.info("{}Register bean: {}", getStartedSymbol(), ioc.getBeans());
}
List<BeanDefine> beanDefines = ioc.getBeanDefines();
if (BladeKit.isNotEmpty(beanDefines)) {
beanDefines.forEach(b -> {
IocKit.initInjection(ioc, b);
IocKit.injectionValue(environment, b);
List<TaskStruct> cronExpressions = BladeKit.getTasks(b.getType(), environment);
if (null != cronExpressions) {
taskStruts.addAll(cronExpressions);
}
});
}
this.loaders.stream().sorted(new OrderComparator<>()).forEach(b -> b.load(blade));
this.processors.stream().sorted(new OrderComparator<>()).forEach(b -> b.processor(blade));
}
use of com.blade.ioc.bean.BeanDefine in project blade by biezhi.
the class IocKit method injection.
public static void injection(Ioc ioc, BeanDefine beanDefine) {
ClassDefine classDefine = ClassDefine.create(beanDefine.getType());
List<FieldInjector> fieldInjectors = getInjectFields(ioc, classDefine);
Object bean = beanDefine.getBean();
fieldInjectors.forEach(fieldInjector -> {
Object fieldInstance = ReflectKit.newInstance(fieldInjector.getType());
if (fieldInjector.hasInjectFields()) {
injection(ioc, new BeanDefine(fieldInstance));
}
fieldInjector.injection(bean, fieldInstance);
});
}
Aggregations