zoukankan      html  css  js  c++  java
  • 自动注入bean,简化持久化

    import org.apache.commons.dbcp2.BasicDataSource;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.mapper.MapperScannerConfigurer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.FatalBeanException;
    import org.springframework.beans.factory.config.BeanDefinition;
    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.context.ResourceLoaderAware;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.ResourceLoader;
    
    import org.springframework.stereotype.Component;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    @Component
    public class DataSourceRegistrar implements BeanDefinitionRegistryPostProcessor, ResourceLoaderAware {
    
        private static final Logger logger = LoggerFactory.getLogger(DataSourceRegistrar.class);
    
        private static final String DATABASE_PROPERTIES_FILE = "database.properties";
    
        private ResourceLoader resourceLoader;
    
        @Override
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
            Properties databases = this.loadConfigProperties();
            BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(BasicDataSource.class);
            for (String prop : databases.stringPropertyNames()) {
                String key = prop;
                String value = databases.getProperty(prop);
                beanDefinitionBuilder.addPropertyValue(key,value);
            }
            BeanDefinition dataSourceDef =  beanDefinitionBuilder.getBeanDefinition();
            registry.registerBeanDefinition("dataSource",dataSourceDef);
            //<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            //<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            //<property name="url" value="jdbc:mysql://..."/>
            //<property name="username" value="..."/>
            //<property name="password" value="..."/>
            //</bean>
    
            String sqlSessionFactoryBean = SqlSessionFactoryBean.class.getSimpleName();
            BeanDefinition sqlSessionFactoryBeanDef = BeanDefinitionBuilder.rootBeanDefinition(SqlSessionFactoryBean.class)
                    .addPropertyReference("dataSource","dataSource")
                    .getBeanDefinition();
            registry.registerBeanDefinition(sqlSessionFactoryBean,sqlSessionFactoryBeanDef);
            //<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            //<property name="dataSource" ref="dataSource"/>
            //</bean>
    
            String mapperScannerConfigurer = MapperScannerConfigurer.class.getSimpleName();
            BeanDefinition mapperScannerConfigurerBeanDef =
                    BeanDefinitionBuilder.rootBeanDefinition(MapperScannerConfigurer.class)
                            .addPropertyValue("basePackage", "hw.test.db.dao")
                            .getBeanDefinition();
            registry.registerBeanDefinition(mapperScannerConfigurer,mapperScannerConfigurerBeanDef);
        }
    
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    
        }
    
        @Override
        public void setResourceLoader(ResourceLoader resourceLoader) {
            this.resourceLoader = resourceLoader;
        }
    
        private Properties loadConfigProperties() {
            Properties properties = new Properties();
            InputStream inputStream = null;
            try {
                Resource resource = this.resourceLoader.getResource(DATABASE_PROPERTIES_FILE);
                if (resource.exists()) {
                    inputStream = resource.getInputStream();
                    properties.load(inputStream);
                } else {
                    logger.warn(DATABASE_PROPERTIES_FILE + " not found");
                }
            } catch (IOException e) {
                throw new FatalBeanException("Load " + DATABASE_PROPERTIES_FILE + " failed");
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        logger.error("Close inputStream failed", e);
                    }
                }
            }
            logger.info("{}:{}", DATABASE_PROPERTIES_FILE, properties);
            return properties;
        }
    
    }
    

      以为代码自动编写bean的注入,不需要再写xml配置文件

    dao层代码

    import org.apache.ibatis.annotations.Select;
    
    public interface PcapFileDao {
    
        @Select("select * from pcap_file where id=#{id}")
        PcapFile getPcapFile(int id);
    }

    最后使用

    @Autowired
    private PcapFileDao pcapFileDao;
  • 相关阅读:
    bootstrap之CDN
    bootstrap之HTML模板
    Glyphicon 字体图标
    crawler4j 学习(二)
    【软件构造】第二章 软件构建的过程和工具(2)
    【软件构造】第二章 软件构建的过程和工具(1)
    【软件构造】第一章 软件构造基础(2)
    【软件构造】第一章 软件构造基础(1)
    机器学习技法笔记-Lecture 1 Linear support vector machine
    机器学习基石笔记-Lecture 15 Validation
  • 原文地址:https://www.cnblogs.com/nnavvi/p/7390628.html
Copyright © 2011-2022 走看看