bboss ioc 문법 확장 사용자 정의 ioc 의존 주입 기능 구현

자세히 보기
bbossioc 설정 문법은 간결하고 엄밀하며 강력한 의존 주입 기능을 제공합니다. 또한 개발자는 임의로 ioc 요소property에 확장 속성을 추가하여 사용자 정의 ioc 의존 주입 기능을 실현할 수 있습니다.업계의 다른 ioc 프레임워크의 사용자 정의 확장 ioc 문법은 xsd 설명 파일을 작성해야 할 수도 있습니다. bboss ioc는 쉽게 확장되고 xsd 파일을 작성할 필요가 없습니다. 본고는 bboss의 사용자 정의 ioc 의존 주입 기능을 어떻게 실현하는지 예를 들어 설명합니다.
이 기능을 수행하려면 다음 세 단계가 필요합니다.
1. ioc 의존 주입 플러그인을 정의하고 플러그인은 인터페이스를 실현해야 합니다.
org.frameworkset.spi.assemble.plugin.IocPlugin
public interface IocPlugin {
	/**
	 *     ioc         
	 * @param object    ioc    ,     :Pro,ProMap,ProList,ProArray,ProSet
	 * @param callcontext ioc       ,              
	 * @return
	 */
	public R ioc(T object, CallContext callcontext);

}
   
2. 작성된 플러그인으로 iocxml 파일 작성
3. 작성된 iocxml 파일을 불러오는 ioc 용기를 정의하고 사용자 정의 ioc 메커니즘을 통해 정의된 구성 요소를 가져옵니다
다음에 상기 세 가지 절차를 설명하자면 이 예시의 기능은 매우 간단하다. 몇 개의 excel 가져오기 템플릿을 정의하고 ioc 문법을 통해 이 템플릿 구조 정보를 설명한 다음에 ioc 의존 주입 플러그인을 통해 이 excel 템플릿 정보를 맵 대상으로 해석한 다음에 템플릿 정보를 이용하여 일반적인 excel 가져오기 기능을 실현한다.
첫 번째 단계는 ioc 주입 플러그인 및 의존하는 excel 템플릿 구조po 대상을 작성합니다
ioc 주입 플러그인-ExcelIOCPlugin 인터페이스 방법은 excel 가져오기 템플릿 맵 데이터 구조를 포함하고 이 정보는 ioc xml 문법으로 설명됩니다
package org.frameworkset.spi.assemble.plugin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.frameworkset.spi.CallContext;
import org.frameworkset.spi.assemble.Pro;
import org.frameworkset.spi.assemble.ProList;
import org.frameworkset.spi.assemble.ProMap;

public class ExcelIOCPlugin implements IocPlugin>{

	@Override
	public Map ioc(ProMap promap, CallContext callcontext) {
		Map excelTemplates = new HashMap();
        Set> entries = promap.entrySet();
        Iterator> it = entries.iterator();
        while (it.hasNext()) {
            Map.Entry e = it.next();
            String name = e.getKey();
            Pro pro = e.getValue();
            String templatepath = pro.getStringExtendAttribute("templatepath");

            ExcelTemplate template = new ExcelTemplate();
            template.setName(name);
            template.setStarrow(pro.getIntExtendAttribute("statrow", 1));
            template.setEndrow(pro.getIntExtendAttribute("endrow", -1));
            template.setTemplatepath(templatepath);
            excelTemplates.put(name, template);

            if(!name.equals("exceltemplatefile4"))//  ioc       execl        
            {
	            List cellList = new ArrayList();
	            ProList templateCellList = pro.getList();
	
	            for (int i = 0; i < templateCellList.size(); i++) {
	
	                Pro cellPro = (Pro) templateCellList.get(i);
	
	                ExcelCell cellBean = new ExcelCell();
	                cellBean.setCellpostion(cellPro.getIntExtendAttribute("cellpostion"));
	                cellBean.setJavaFiledName(cellPro.getStringExtendAttribute("javaFiledName"));
	                cellBean.setCelltype(cellPro.getStringExtendAttribute("celltype"));
	                cellList.add(cellBean);
	            }
	            template.setCells(cellList);
            }
            else//  bboss ioc        execl        
            {
            	 @SuppressWarnings("unchecked")
				List cellList = (List) pro.getBeanObject(callcontext);
 	             template.setCells(cellList);
            }
        }
        return excelTemplates;
	}

}

ExcelTemplate 템플릿 정보 클래스 - execl의 데이터 시작 줄과 데이터 끝 줄, 셀 정보 목록 등을 포함합니다
package org.frameworkset.spi.assemble.plugin;

import java.util.List;

public class ExcelTemplate {
	String name;

    String templatepath;

    int starrow;

    int endrow = -1;

    List cells;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTemplatepath() {
        return templatepath;
    }

    public void setTemplatepath(String templatepath) {
        this.templatepath = templatepath;
    }

    public int getStarrow() {
        return starrow;
    }

    public void setStarrow(int starrow) {
        this.starrow = starrow;
    }

    public int getEndrow() {
        return endrow;
    }

    public void setEndrow(int endrow) {
        this.endrow = endrow;
    }

    public List getCells() {
        return cells;
    }

    public void setCells(List cells) {
        this.cells = cells;
    }
}

excel 모듈 대상 - 모듈 위치, 모듈 데이터 형식, 모듈에 대응하는java값 대상 속성 이름 포함
package org.frameworkset.spi.assemble.plugin;

public class ExcelCell {
	private int cellpostion;

	private String javaFiledName;

	private String celltype;

    public int getCellpostion() {
        return cellpostion;
    }

    public void setCellpostion(int cellpostion) {
        this.cellpostion = cellpostion;
    }

    

    public String getCelltype() {
        return celltype;
    }

    public void setCelltype(String celltype) {
        this.celltype = celltype;
    }

	public String getJavaFiledName() {
		return javaFiledName;
	}

	public void setJavaFiledName(String javaFiledName) {
		this.javaFiledName = javaFiledName;
	}
}

2단계 ioc xml 파일 정의 - excelFieldInfo.xml
excelFieldInfo.xml은 패키지 경로 org/frameworkset/spi/assemble/plugin 아래에 저장됩니다. 내용은 다음과 같습니다.



	
		 
			
			     
					 
					 
					 
					 
				  
			   
			
			     
					 
					 
					 
					 
				  
			   
			
			     
					 
					 
					 
					
				  
			   
			
			
			     
					 
					 
					 
					
				  
			   
		 
	
	
	
	
	

내용 설명:
구성 요소 excelMapping은 ioc 종속 주입 플러그인을 구성합니다.
iocplugin="org.frameworkset.spi.assemble.plugin.ExcelIOCPlugin"
플러그인 ExcelIOCplugin을 통해 excelMapping을 Map 대상으로 변환합니다. 이 대상은 업무 구성 요소인 POIExcel 서비스의 excelTemplates 속성에 주입됩니다.
POIExcel Service 구성 요소의 구현 클래스는 다음과 같습니다.
package org.frameworkset.spi.assemble.plugin;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
/**
 *      ioc         ,  ioc       ioc      ,     ioc      
 * @author yinbp
 *
 */
public class POIExcelService {
	/**
	 *     execl    ,             ioc     
	 */
	 private Map excelTemplates;
	 
    /**
     *      excel ,           excel            ,  beanType        
     * 
     * @param file
     * @return
     * @throws IOException
     */
    public  List parseHSSFMapList(InputStream in,Class beanType,String templatename) throws IOException 
    {
         ExcelTemplate template = excelTemplates.get(templatename);//  excel  
         //    , excel   in     excel              List      :
         List datas = .....;
    	return datas ;
    }
}

3단계 검증 기능 - 테스트 용례 작성 및 실행
package org.frameworkset.spi.assemble.plugin;

import java.io.IOException;

import org.frameworkset.spi.BaseApplicationContext;
import org.frameworkset.spi.DefaultApplicationContext;
import org.junit.Test;

public class TestIocPlugin {
	@Test
	public void testiocplugin() throws IOException
	{
		  BaseApplicationContext excelMapping = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/assemble/plugin/excelFieldInfo.xml");//  ioc  
		  POIExcelService serice = excelMapping.getTBeanObject("POIExcelService", POIExcelService.class);//      ,ioc     ioc    excelMapping         Map    
		  List datas = serice.parseHSSFMapList(in, dataClass,"exceltemplatefile1");//      
		  
	}

}

관련 테스트 용례 원본 github 주소 가져오기:
https://github.com/bbossgroups/bbossgroups-3.5/tree/master/bboss-core/test/org/frameworkset/spi/assemble/plugin

좋은 웹페이지 즐겨찾기