使用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的问题总结~~
阅读全文
0 0
- 使用Java配置装配Spring
- Spring装配-Java配置
- Spring 配置使用 - 装配 Bean
- 【Spring】装配Bean-(1)-使用XML配置
- 简化Spring XML配置---使用注解装配
- Spring 配置使用 - Bean 自动装配
- Spring装配Bean---使用xml配置
- Spring 装配集合配置
- Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用
- Spring使用注解装配
- java spring自动装配
- Spring XML配置--使用注解装配(@Atutowired、@Inject、@Resource)
- Spring XML配置--使用注解装配(@Atutowired、@Inject、@Resource)
- Spring XML配置--使用注解装配(@Atutowired、@Inject、@Resource)
- Spring XML配置--使用注解装配(@Atutowired、@Inject、@Resource)
- 使用注解+xml配置完成spring的bean的装配
- 使用spring进行bean装配
- Spring 使用注解装配Bean
- 新词添加功能:错别字检查接口 API
- 天使链ACCH能否走向未来?
- mongodb对象mongo object —id的值
- 如何在网页中调用百度地图API
- hadoop之伪分布式模式
- 使用Java配置装配Spring
- Java双向链表的实现
- 1.dubbo-admin安装,dubbo配置标签说明
- BaseDaoTest
- Hibernate的学习之路三十四(QBC的聚合函数的查询)
- 车厢重组
- (八)InputStreamReader及OutputStreamWriter
- 区块链开发(七)以太坊钱包 Mist
- SQL多列子表查询,及内容拆分成多行