使用Java配置装配Spring

近期项目要求Spring零配置,采用Java配置。总结出一些用到的注解~~

1.@Configuration和@Bean搭配使用

用@Configuration注解该类,等价与XML中配置beans;用@Bean标注方法等价于XML中配置bean。

实例:

package com.sitech.ddoe.server.all.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.AbstractAttribute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import com.sitech.ddoe.comm.common.HeartBeatConfig;
import com.sitech.ddoe.comm.server.core.ServerConfig;

/**
 * 从server.xml中读取配置信息
 * 
 * @author zhaojing_bcc
 *
 */
@Configuration
public class ServerReader {

    private DataSource dataSource;

    public Logger logger = LoggerFactory.getLogger(getClass());

    @PostConstruct
    public void init() {

        File xmlFile = new File("src/main/resources/server.xml");
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(xmlFile);
        } catch (FileNotFoundException e) {
            logger.debug("File is not exsit!");
            e.printStackTrace();
        }

        SAXReader saxReader = new SAXReader();
        try {
            // 生成文档对应实体
            Document doc = saxReader.read(fis);
            // 获取指定路径下的元素列表,这里指获取所有的data下的row元素
            Element root = doc.getRootElement();
            Iterator iterator = root.elementIterator();
            while (iterator.hasNext()) {
                // 标签转换成元素对象
                Element ele = (Element) iterator.next();
                // 获取元素的名字
                String elementName = ele.getName();
                switch (elementName) {
                case "ServerConfig":
                    handlerServerConfig(ele.attributes());
                    break;
                case "Datasource":
                    handlerDatasource(ele.attributes());
                    break;
                case "HeartBeat":
                    handlerHeartBeat(ele.attributes());
                    break;
                default:
                    break;
                }
            }
        } catch (DocumentException e) {
            logger.debug("parse xml error!");
            e.printStackTrace();
        }

    }

    /**
     * 装配HeartBeatConfig
     * 
     * @param attributes
     * @return HeartBeatConfig
     */
    @Bean
    public HeartBeatConfig handlerHeartBeat(List elementList) {

        Integer heartbeatSeconds = null;
        Integer channelReadIdleSeconds = null;

        for (Iterator it = elementList.iterator(); it.hasNext();) {
            // 将每个属性转化为一个抽象属性,然后获取其名字和值
            AbstractAttribute aa = (AbstractAttribute) it.next();
            String name = aa.getName();
            String value = aa.getValue();
            switch (name) {
            case "heartbeatSeconds":
                heartbeatSeconds = Integer.valueOf(value);
                break;
            case "channelReadIdleSeconds":
                channelReadIdleSeconds = Integer.valueOf(value);
                break;
            default:
                throw new RuntimeException(name + "is error property");
            }
        }
        return new HeartBeatConfig(heartbeatSeconds, channelReadIdleSeconds);

    }

    /**
     * 装配ServerConfig
     * 
     * @param elementList
     * @return ServerConfig
     */
    @Bean
    public ServerConfig handlerServerConfig(List elementList) {

        Integer port = null;
        Integer businessThreadNum = null;
        Integer nioThreadNum = null;

        for (Iterator it = elementList.iterator(); it.hasNext();) {
            // 将每个属性转化为一个抽象属性,然后获取其名字和值
            AbstractAttribute aa = (AbstractAttribute) it.next();
            String name = aa.getName();
            String value = aa.getValue();
            switch (name) {
            case "port":
                port = Integer.valueOf(value);
                break;
            case "businessThreadNum":
                businessThreadNum = Integer.valueOf(value);
                break;
            case "nioThreadNum":
                nioThreadNum = Integer.valueOf(value);
                break;
            default:
                throw new RuntimeException(name + "is error property");
            }
        }
        return new ServerConfig(port, businessThreadNum, nioThreadNum);

    }

    /**
     * 装配DataSource
     * 
     * @param elementList
     * @return DataSource
     */
    @Bean
    public DataSource handlerDatasource(List elementList) {

        BasicDataSource dataSource = new BasicDataSource();
        for (Iterator it = elementList.iterator(); it.hasNext();) {
            // 将每个属性转化为一个抽象属性,然后获取其名字和值
            AbstractAttribute aa = (AbstractAttribute) it.next();
            String name = aa.getName();
            String value = aa.getValue();

            switch (name) {
            case "driverClassName":
                dataSource.setDriverClassName(value);
                break;
            case "url":
                dataSource.setUrl(value);
                break;
            case "username":
                dataSource.setUsername(value);
                break;
            case "password":
                dataSource.setPassword(value);
                break;
            case "defaultAutoCommit":
                dataSource.setDefaultAutoCommit(Boolean.valueOf(value));
                break;
            case "defaultReadOnly":
                dataSource.setDefaultReadOnly(Boolean.valueOf(value));
                break;
            case "maxActive":
                dataSource.setMaxActive(Integer.valueOf(value));
                break;
            case "maxIdle":
                dataSource.setMaxIdle(Integer.valueOf(value));
                break;
            case "maxWait":
                dataSource.setMaxWait(Integer.valueOf(value));
                break;
            case "initialSize":
                dataSource.setInitialSize(Integer.valueOf(value));
                break;
            default:
                break;
            }

        }
        this.dataSource = dataSource;
        return dataSource;

    }

    /**
     * 装配JdbcTemplate
     * 
     * @return JdbcTemplate
     */

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

}

2.main函数启动项目

public class Run {

    public static void main(String[] args) {
        ApplicationContext annotationContext = new AnnotationConfigApplicationContext("com.sitech.ddoe");
        NettyServer n = annotationContext.getBean("nettyServer", NettyServer.class);// 创建bean的引用对象
        n.start();
    }

}

3.参考:

Spring Boot集成JdbcTemplate的问题总结~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值