使用Java配置装配Spring

来源:互联网 发布:阿里云os 编辑:程序博客网 时间:2024/06/06 02:14

近期项目要求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 * */@Configurationpublic 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的问题总结~~