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}]}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值