直接上代码 很简单一看就懂了
这是我自写的一个与mybatis类似的orm框架与spring集成的两个主要的类,希望能给和同样想自造轮子的童鞋抛出一块砖头
BeanFactory
package org.smile.orm.spring; import org.smile.orm.dao.MapperProxy; import org.springframework.beans.factory.FactoryBean; public class MapperBeanFactory<T> implements FactoryBean<T>{ private MapperProxy<T> proxy; private Class<T> type; private boolean singleton; @Override public T getObject() throws Exception { if(singleton){ return proxy.getInterfaceDao(); }else{ return MapperProxy.copy(proxy).getInterfaceDao(); } } @Override public Class<T> getObjectType() { return type; } @Override public boolean isSingleton() { return singleton; } public void setSingleton(boolean singleton) { this.singleton = singleton; } public void setProxy(MapperProxy<T> proxy){ this.proxy=proxy; } public void setType(Class<T> type) { this.type = type; } }
SpringXmlApplication
package org.smile.orm.spring; import org.smile.orm.dao.DaoMapper; import org.smile.orm.dao.MapperProxy; import org.smile.orm.load.ClassPathXmlApplication; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringXmlApplication extends ClassPathXmlApplication implements BeanDefinitionRegistryPostProcessor,ApplicationContextAware{ private DefaultListableBeanFactory acf ; @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefin) throws BeansException { initOrmApplication(); BeanDefinitionBuilder bdb; for(DaoMapper<?> mapper:application.getAllMapper()){ bdb = BeanDefinitionBuilder.rootBeanDefinition(MapperBeanFactory.class.getName()); bdb.getBeanDefinition().setAttribute("id", mapper.getName()); bdb.addPropertyValue("proxy", new MapperProxy(application, mapper)); bdb.addPropertyValue("type", mapper.getDaoClass()); bdb.addPropertyValue("singleton", mapper.isSingle()); // 注册bean acf.registerBeanDefinition(mapper.getName(), bdb.getBeanDefinition()); } } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException { } @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.acf=(DefaultListableBeanFactory)context.getAutowireCapableBeanFactory(); } }
ClassPathXmlApplication
package org.smile.orm.load; import java.util.List; import javax.naming.NamingException; import javax.sql.DataSource; import org.smile.db.DbManager; import org.smile.db.Dialect; import org.smile.orm.OrmApplication; import org.smile.orm.dao.BaseExecutor; import org.smile.orm.dao.Executor; public class ClassPathXmlApplication implements Application{ protected DataSource dataSource; protected List<String> packageString; protected OrmApplication application; protected Dialect dialect; @Override public void setDataSource(Object dataSource) { if(dataSource instanceof DataSource){ this.dataSource=(DataSource)dataSource; }else{ try { this.dataSource = DbManager.getDataSource(String.valueOf(dataSource)); } catch (NamingException e) { e.printStackTrace(); } } } @Override public void setPackageString(List<String> packageString) { this.packageString = packageString; } @Override public void initOrmApplication(){ application=new OrmApplication(); application.setPackageString(packageString); Executor executor=new BaseExecutor(); executor.setDataSource(dataSource); executor.setDialect(dialect); application.setExecuter(executor); application.init(); } @Override public OrmApplication getOrmApplication() { return application; } @Override public void setDialect(String dialect) { this.dialect=Dialect.of(dialect); } }
spring 中的配置
<bean id="dataSource" class="org.smile.db.DataSourceBean"> <property name="name" value="mysql"></property> </bean> <bean id="ormappliction" class="org.smile.orm.spring.SpringXmlApplication"> <property name="dataSource" ref="dataSource"></property> <property name="dialect" value="mysql"></property> <property name="packageString"> <list> <value>dbmapper</value> </list> </property> </bean>
相关推荐
主要介绍了Spring启动后获取所有拥有特定注解的Bean实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制...
2.3注入bean属性 2.3.1注入简单的数值 2.3.2使用其他的bean 2.3.3装配集合 2.3.4装配空值 2.4自动装配 2.4.1四种自动装配类型 2.4.2混合使用自动和手动装配 2.4.3何时采用自动装配 2.5控制bean创建 2.5.1...
2.3 注入Bean属性 2.3.1 注入简单的数值 2.3.2 使用其他的Bean 2.3.3 装配集合 2.3.4 装配空值 2.4 自动装配 2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean...
2.3 注入Bean属性 2.3.1 注入简单的数值 2.3.2 使用其他的Bean 2.3.3 装配集合 2.3.4 装配空值 2.4 自动装配 2.4.1 四种自动装配类型 2.4.2 混合使用自动和手动装配 2.4.3 何时采用自动装配 2.5 控制Bean...
但是现在 spring boot 应用中引入了很多第三方 starter ,比如 druid-spring-boot-starter 数据源注入、spring-boot- starter-data-redis 缓存等默认情况下, 引入即注入了相关 bean 我们无法去修改添加 @Lazy 。
2.4 使用Spring的特殊Bean 2.4.1 对Bean进行后处理 2.4.2 对Bean工厂进行后处理 2.4.3 分散配置 2.4.4 定制属性编辑器 2.4.5 解析文本信息 2.4.6 监听事件 2.4.7 发布事件 2.4.8...
将DataSource、SessionFactory、Transaction等作为Spring的Bean,通过配置文件的方式来管理。 24.1 概述 24.1.1 概述 Spring提供了DAO支持,可以简化DAO组件的开发,特别是IoC容器的使用,提供了DAO组件与业务...
mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门...
项目说明 : ...优点 : MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 Mybatis官方文档 : http://mybatis.github.io/mybatis-3/zh/index.html Mybatis-spring官方文档 : ...
Spring Beans和依赖注入 vi. 18. 使用@SpringBootApplication注解 vii. 19. 运行应用程序 i. 19.1. 从IDE中运行 ii. 19.2. 作为一个打包后的应用运行 iii. 19.3. 使用Maven插件运行 iv. 19.4. 使用Gradle插件运行 v...
依赖注入的模式,依赖注入模式一般分为两类:手动注入和自动注入。 手动模式即配置或者编程的方式,提前安排注入规则,包括xml资源配置元信息、java注解配置元信息和api配置信息,xml资源配置元信息,是比较常见...
3.2 ProcessEngineConfiguration bean ............................................................................................................................... 9 3.3 数据库配置 .....................