spring的property、map、list、props、array、constructor-arg工具應用

 

一、場景舉例

以如下場景的例子介紹(如下業務場景都爲假設,主要爲實例提供業務場景,如有不合理地方可以不必關注):

 1.有兩個場所公司和學校

 2.公司和學校共有如下特點:學校崗位的員工都有名字和編號,公司崗位的員工有名字、編號與部門,學校崗位的員工與公司崗位的員工都是自然人

 3.其中學校有三種類型的崗位:管理者、學生、老師,其中管理者、學生、老師都是員工,員工有共同的自然人特點:行爲與思想

基於如上場景,設計業務代碼,生成工具類,讓學校或公司客戶端通過某個服務端的spring配置就可以獲取到某個崗位的所有信息(本代碼用例沒有業務邏輯,實際場景會有業務邏輯,只是展示場景框架)

二、服務端代碼實現

1.按照崗位->員工->自然人的繼承關係,實現自然人接口、員工接口、崗位實現類

/**
 * 自然人
 */
public interface BasePerson {

   String  buildBehave(String industry,String position);

   String  buildThought(String industry,String proIdea);
}



/**
 * 員工
 */
public interface Person extends BasePerson {

    String  personName (String name);

    String personNo(String personNo);
}



/**
 * 管理者
 */
public class Manager implements Person {
    private String plan;
    private int count;
    private Map<String, Department> departments;
    private Properties propers;
    private List<Task> tasks;
    private String[] orders;
    private Meeting meeting;
    public Manager(String plan,int count,Meeting meeting){
        this.plan=plan;
        this.count=count;
        this.meeting=meeting;
    }
    @Override
    public String  personName (String name){
       String strName="M"+name;
       return strName;
    }
    @Override
    public String personNo(String personNo){
       String strNo="M"+personNo;
       return strNo;
    }
    @Override
    public String  buildBehave(String industry,String position){
        String strBehave=industry+"_"+position;
        return strBehave;
    }
    @Override
    public String  buildThought(String industry,String proIdea){
        String strThought=industry+"_"+proIdea;
        return strThought;
    }

    public String getPlan() {
        return plan;
    }

    public void setPlan(String plan) {
        this.plan = plan;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public Map<String, Department> getDepartments() {
        return departments;
    }

    public void setDepartments(Map<String, Department> departments) {
        this.departments = departments;
    }

    public List<Task> getTasks() {
        return tasks;
    }

    public void setTasks(List<Task> tasks) {
        this.tasks = tasks;
    }

    public String[] getOrders() {
        return orders;
    }

    public void setOrders(String[] orders) {
        this.orders = orders;
    }

    public Meeting getMeeting() {
        return meeting;
    }

    public void setMeeting(Meeting meeting) {
        this.meeting = meeting;
    }

    public Properties getPropers() {
        return propers;
    }

    public void setPropers(Properties propers) {
        this.propers = propers;
    }
}


/**
 * 學生
 */
public class Student implements Person {
    //閱讀
    private String readDing;
    //成績
    private Integer score;

    @Override
    public String  personName (String name){
        String strName="S"+name;
        return strName;
    }
    @Override
    public String personNo(String personNo){
        String strNo="S"+personNo;
        return strNo;
    }
    @Override
    public String  buildBehave(String industry,String position){
        String strBehave=industry+"*"+position;
        return strBehave;
    }
    @Override
    public String  buildThought(String industry,String proIdea){
        String strThought=industry+"*"+proIdea;
        return strThought;
    }

    public String getReadDing() {
        return readDing;
    }

    public void setReadDing(String readDing) {
        this.readDing = readDing;
    }

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }
}

/**
 * 老師
 */
public class Teacher implements Person {
    //授課內容
    private String teachContext;
    //考覈
    private String check;

    @Override
    public String  personName (String name){
        String strName="T"+name;
        return strName;
    }
    @Override
    public String personNo(String personNo){
        String strNo="T"+personNo;
        return strNo;
    }
    @Override
    public String  buildBehave(String industry,String position){
        String strBehave=industry+"&"+position;
        return strBehave;
    }
    @Override
    public String  buildThought(String industry,String proIdea){
        String strThought=industry+"&"+proIdea;
        return strThought;
    }

    public String getTeachContext() {
        return teachContext;
    }

    public void setTeachContext(String teachContext) {
        this.teachContext = teachContext;
    }

    public String getCheck() {
        return check;
    }

    public void setCheck(String check) {
        this.check = check;
    }
}

2.關於管理者崗位屬性的對象  

/**
 * 教室
 */
public class Classroom extends Department {
    /**
     * 桌子
     */
    private String table;
    /**
     * 椅子
     */
    private String chair;

    public String getTable() {
        return table;
    }

    public void setTable(String table) {
        this.table = table;
    }

    public String getChair() {
        return chair;
    }

    public void setChair(String chair) {
        this.chair = chair;
    }
}


/**
 * 部門
 */
public class Department  {

    //部門名稱
    private String departName;
    //部門編號
    private Integer departNo;

    public String getDepartName() {
        return departName;
    }

    public void setDepartName(String departName) {
        this.departName = departName;
    }

    public Integer getDepartNo() {
        return departNo;
    }

    public void setDepartNo(Integer departNo) {
        this.departNo = departNo;
    }
}

/**
 * 實驗室
 */
public class Laboratory extends Department{
    /**
     * 實驗器材
     */
    private String labTool;
    /**
     * 實驗室老師
     */
    private String labTeacher;

    public String getLabTool() {
        return labTool;
    }

    public void setLabTool(String labTool) {
        this.labTool = labTool;
    }

    public String getLabTeacher() {
        return labTeacher;
    }

    public void setLabTeacher(String labTeacher) {
        this.labTeacher = labTeacher;
    }
}


/**
 * 會議
 */
public class Meeting {
    //開始時間
    private Date startTime;
    //結束時間
    private Date endTime;
    //房間編號
    private String roomNo;

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public String getRoomNo() {
        return roomNo;
    }

    public void setRoomNo(String roomNo) {
        this.roomNo = roomNo;
    }
}

/**
 * 科研室
 */
public class Research extends Department {
    //電腦類型
    private String computerType;
    //導師
    private String tutor;

    public String getComputerType() {
        return computerType;
    }

    public void setComputerType(String computerType) {
        this.computerType = computerType;
    }

    public String getTutor() {
        return tutor;
    }

    public void setTutor(String tutor) {
        this.tutor = tutor;
    }
}

/**
 * 任務
 */
public class Task  {
    //任務名稱
    private String taskName;
    //任務編號
    private Integer taskNo;
    //費用
    private BigDecimal fee;

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public Integer getTaskNo() {
        return taskNo;
    }

    public void setTaskNo(Integer taskNo) {
        this.taskNo = taskNo;
    }

    public BigDecimal getFee() {
        return fee;
    }

    public void setFee(BigDecimal fee) {
        this.fee = fee;
    }
}

三、業務代碼生成pom

<dependency>
      <groupId>util</groupId>
      <artifactId>util-project</artifactId>
      <version>1.0-SNAPSHOT</version>
</dependency>

四、客戶端通過spring配置設置崗位信息(以管理崗位爲例)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="dateFormat" class="java.text.SimpleDateFormat">
        <constructor-arg value="yyyy-MM-dd" />
    </bean>
    <bean id="meeting" class="com.jd.util.project.service.springBaseGrammar.domain.Meeting">
         <property name="startTime">
             <!--factory-bean指定bean,factory-method指定bean的方法,constructor-arg方法的入參-->
            <bean factory-bean="dateFormat" factory-method="parse">
                <constructor-arg value="2018-01-01" />
            </bean>
        </property>
        <property name="endTime">
            <bean factory-bean="dateFormat" factory-method="parse">
                <constructor-arg value="2018-02-01" />
            </bean>
        </property>
        <property name="roomNo" value="NO1"/>
    </bean>
    <bean id="laboratory" class="com.jd.util.project.service.springBaseGrammar.domain.Laboratory">
        <property name="labTool" value="computer" />
        <property name="labTeacher" value="張三" />
        <property name="departName" value="laboratory"/>
        <property name="departNo" value="1"/>
    </bean>
    <bean id="classroom" class="com.jd.util.project.service.springBaseGrammar.domain.Classroom">
        <property name="table" value="table" />
        <property name="chair" value="chair" />
        <property name="departName" value="laboratory"/>
        <property name="departNo" value="1"/>
    </bean>
    <bean id="research" class="com.jd.util.project.service.springBaseGrammar.domain.Research">
        <property name="computerType" value="mac" />
        <property name="tutor" value="李四" />
        <property name="departName" value="laboratory"/>
        <property name="departNo" value="1"/>
    </bean>
    <bean id="task1" class="com.jd.util.project.service.springBaseGrammar.domain.Task">
        <property name="taskName" value="task1" />
        <property name="taskNo" value="1" />
        <property name="fee" value="100.99"/>
    </bean>
    <bean id="task2" class="com.jd.util.project.service.springBaseGrammar.domain.Task">
        <property name="taskName" value="task2" />
        <property name="taskNo" value="2" />
        <property name="fee" value="88.01"/>
    </bean>
    <!-- property是通過setter注入,參數爲值用value,參數爲bean用ref,而且name的映射值都是String類型-->
    <bean id="manager" class="com.jd.util.project.service.springBaseGrammar.impl.Manager">
        <property name="plan" value="planOne"/>
        <property name="count" value="6"/>
        <property name="meeting" ref="meeting"/>
        <property name="departments">
            <!-- map注入-->
            <map>
                <entry key="laboratory" value-ref="laboratory"/>
                <entry key="classroom" value-ref="classroom"/>
                <entry key="research" value-ref="research"/>
            </map>
        </property>
        <property name="propers">
            <!-- properties注入-->
            <props>
                <prop key="account">zhanghao</prop>
                <prop key="password">123456</prop>
            </props>
        </property>
        <property name="orders">
            <!-- 數組注入-->
            <array>
                <value>start</value>
                <value>end</value>
            </array>
        </property>
        <property name="tasks">
             <!-- list注入-->
             <list>
                 <ref bean="task1"/>
                 <ref bean="task2"/>
             </list>
        </property>
        <!-- constructor-arg 通過構造函數注入,index爲第index個參數-->
        <constructor-arg index="0" value="plan2"/>
        <constructor-arg index="1" value="6"/>
        <constructor-arg index="2" ref="meeting"/>
    </bean>

</beans>

五、測試

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/spring-config.xml")
public class SpringBaseGrammerTest {
    private static final Logger logger = LoggerFactory.getLogger(SpringBaseGrammerTest.class);
    @Test
    public void springBaseGrammerTest(){
        ApplicationContext context=new ClassPathXmlApplicationContext("spring/spring-config-springBaseGrammer.xml");
        Manager manager=(Manager)context.getBean("manager");
        System.out.println(JSON.toJSONString(manager));
        logger.info(JSON.toJSONString(manager));

    }
}

輸出結果:

{"count":6,"departments":{"laboratory":{"departName":"laboratory","departNo":1,"labTeacher":"張三","labTool":"computer"},"classroom":{"chair":"chair","departName":"laboratory","departNo":1,"table":"table"},"research":{"computerType":"mac","departName":"laboratory","departNo":1,"tutor":"李四"}},"meeting":{"endTime":1517414400000,"roomNo":"NO1","startTime":1514736000000},"orders":["start","end"],"plan":"planOne","propers":{"account":"zhanghao","password":"123456"},"tasks":[{"fee":100.99,"taskName":"task1","taskNo":1},{"fee":88.01,"taskName":"task2","taskNo":2}]}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章