1、通过注解@Import导入方式创建
a、新建MyImportBeanDefinitionRegistrar注册中心
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; import web0.services.Myservice; public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { protected String BEAN_NAME = "myservice"; public void dynamicConfiguration() throws Exception { } @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if (!registry.containsBeanDefinition(BEAN_NAME)) { GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(Myservice.class); beanDefinition.setSynthetic(true); registry.registerBeanDefinition(BEAN_NAME, beanDefinition); } } }
b、在配置类上加@Import引入上面的类
@Import(MyImportBeanDefinitionRegistrar.class) public class TestConfig{ }
c、这样操作后就可以使用spring的方式获取该bean了
d、使用自定义工厂创建bean
public class JdbcPlusBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { AnnotationAttributes annoAttrs = AnnotationAttributes .fromMap(importingClassMetadata.getAnnotationAttributes(JdbcMapperScan.class.getName())); FastClasspathScanner scanner = new FastClasspathScanner(annoAttrs.getStringArray("value")); List<String> classes = scanner.scan().getNamesOfAllClasses(); for (String className : classes) { Class<?> clazz = MethodHandler.initClass(className); if (null != clazz) { String simpleName = clazz.getSimpleName(); String beanName = StringUtils.substring(simpleName, 0, 1).toLowerCase() + StringUtils.substring(simpleName, 1); if (!registry.containsBeanDefinition(beanName)) { RootBeanDefinition definition = new RootBeanDefinition( ); /*JdbcPlusFactoryBean是spring工厂*/ definition.setBeanClass( JdbcPlusFactoryBean.class ); ConstructorArgumentValues argumentValues = new ConstructorArgumentValues(); /*clazz 是要实例化的类*/ argumentValues.addGenericArgumentValue( clazz ); definition.setConstructorArgumentValues(argumentValues); definition.setRole( BeanDefinition.ROLE_INFRASTRUCTURE ); registry.registerBeanDefinition(beanName, definition); } } } } }
jdbcplus工厂:
public class JdbcPlusFactoryBean<T> implements FactoryBean<T> { protected Class<T> mapperInterface; public JdbcPlusFactoryBean() { } public JdbcPlusFactoryBean(Class<T> mapperInterface) { this.mapperInterface = mapperInterface; } @Override public T getObject() throws Exception { return MethodProxy.newInstance(mapperInterface) ; } @Override public Class<?> getObjectType() { return mapperInterface; } @Override public boolean isSingleton() { return true; } }
相关推荐
主要介绍了JSP 开发之Spring Boot 动态创建Bean的相关资料,需要的朋友可以参考下
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
主要给大家介绍了关于Spring Boot如何动态创建Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决...
spring创建bean简单示例
获取Spring Boot 2微框架的可重用代码配方和代码段 了解Spring Boot 2如何与其他Spring API,工具和框架集成 ...使用Spring Boot集成企业服务以创建更复杂的Java应用程序 本书适用于经验丰富的Java和Spring程序员。
spring运行过程中动态注册bean,代码实例
Beginning Spring Boot 2 Beginning Spring Boot 2 Beginning Spring Boot 2
第 2-10 课: 使用 Spring Boot WebSocket 创建聊天室/spring-boot-websocket 第 2-2 课 Spring Boot 项目中使用 JSP/spring-boot-jsp 第 2-3 课 模板引擎 Thymeleaf 基础使用/spring-boot-thymeleaf 第 2-4 课 ...
基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring ...
基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 ...
Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只...
spring动态向容器中添加bean和删除指定bean,不需要重启应用
Spring Boot 使创建独立的、产品级的、基于Spring的应用变得更容易,你只需要运行run即可...你可以使用Spring Boot创建Java应用,用java-jar或更传统的war包来部署应用。我们也提供了运行”Spring脚本”的命令行工具。
Spring Boot视频教程大合集,完美帮助你学习Spring Boot,内部有3套Spring Boot学习视频教程,另附一篇Security Oauth2.0认证授权视频教程
主要给大家介绍了关于spring boot中几种注入方法的一些个人看法,文中通过示例代码介绍的非常详细,对大家学习或者使用spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
本课程内容包括Spring简介、Spring Boot简介、安装JDK、安装Maven、第一个Spring Boot程序(使用Spring Initializr构建、Spring Boot代码讲解、安装Notepad++)、构建系统、代码、配置、三种方式运行程序、安装...
Pro Spring Boot is your authoritative hands-on practical guide for increasing your Spring Framework-based enterprise Java and cloud application productivity while decreasing development time using the...