importcom.duxiu.modules.beetlsql.BeetlSQLDao;importorg.beetl.sql.core.SQLManager;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.support.DefaultListableBeanFactory;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.context.ConfigurableApplicationContext;importorg.springframework.core.io.Resource;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importorg.springframework.core.io.support.ResourcePatternResolver;importjava.io.IOException;importjava.util.Objects;importjava.util.stream.Stream;publicclassDaoFactoryBeanimplementsApplicationContextAware {
@OverridepublicvoidsetApplicationContext(ApplicationContext applicationContext)throwsBeansException {
ConfigurableApplicationContext context=(ConfigurableApplicationContext) applicationContext;
DefaultListableBeanFactory beanFactory=(DefaultListableBeanFactory) context.getBeanFactory();
ResourcePatternResolver rpr=newPathMatchingResourcePatternResolver(applicationContext);
SQLManager sqlManager=applicationContext.getBean(SQLManager.class);try{
Resource[] resources=rpr.getResources("classpath:com/duxiu/**/*.class");
Stream.of(resources).map(f->{try{returnf.getURI().getPath().split("(classes/)|(!/)")[1].replace("/",".").replace(".class","");
}catch(IOException e) {
e.printStackTrace();returnnull;
}
}).filter(Objects::nonNull).forEach(f->{try{
Class>aClass=Class.forName(f);booleanmatch=Stream.of(aClass.getAnnotations()).anyMatch(c->cinstanceofBeetlSQLDao);if(match&&!beanFactory.containsBean(aClass.getSimpleName())) {
System.out.println(sqlManager.getMapper(aClass));//beanFactory.registerSingleton(aClass.getSimpleName(),sqlManager.getMapper(aClass));}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
});
}catch(IOException e) {
e.printStackTrace();
}
System.out.println(applicationContext.getBean(SQLManager.class));/*if(!beanFactory.containsBean(beanName)){
BeanDefinitionBuilder beanDefinitionBuilder= BeanDefinitionBuilder.rootBeanDefinition(beanClass);
beanDefinitionBuilder.addPropertyValue("host", host);
beanDefinitionBuilder.addPropertyValue("port", port);
beanDefinitionBuilder.addPropertyValue("database", database);
beanDefinitionBuilder.setInitMethodName("init");
beanDefinitionBuilder.setDestroyMethodName("destroy");
beanFactory.registerBeanDefinition(beanName, beanDefinitionBuilder.getBeanDefinition());
logger.info("Add {} to bean container.", beanName);
}*/}
}