You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Spring实现从其他对象Getter填充目标对象Setter?

我当时没找到现成的解决方案,索性自己实现了一套,现在分享出来。下面我会分别用标准Java方式和Spring框架方式,实现从RandomData对象的Getter方法取值,填充到Contact对象的Setter方法里。

标准Java实现代码
public class Mediator{ 
    public static Contact getFullContact(){ 
        Contact contact = new Contact(); 
        RandomData randomData = new RandomData(); 
        contact.setName(randomData.getName()); 
        contact.setPhone(randomData.getPhone()); 
        contact.setEmail(randomData.getEmail()); 
        return contact; 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
        for(int i=0; i<5; i++) { 
            Contact contact = Mediator.getFullContact(); 
            System.out.println(contact + " / " + contact.getName() + " / " + contact.getPhone() + " / " + contact.getEmail()); 
        } 
    } 
} 
Spring框架实现方案

pom.xml依赖

CGLIB用于在运行时扩展Java类并实现接口。

<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.2.6</version>
</dependency>

Spring ApplicationContext.xml配置

<?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="contact" class="yourPackage.contacts.Contact" scope="prototype"></bean>
    <bean id="randomData" class="yourPackage.contacts.RandomData" scope="prototype"></bean>

    <bean id="conveyor" class="yourPackage.contacts.MediatorConveyor">
        <lookup-method name="createContact" bean="contact"/>
        <!-- CGLIB动态替换生成的Contact类 -->
        <lookup-method name="createRandomData" bean="randomData"/>
        <!-- CGLIB动态替换生成的RandomData类 -->
    </bean>
</beans>

测试类

public class App { 
    public static void main( String[] args ) { 
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); 
        MediatorConveyor conveyor = (MediatorConveyor)context.getBean("conveyor"); 
        for(int i=0; i<5; i++) { 
            Contact contact = conveyor.getContact(); 
            System.out.println(contact + " / " + contact.getName() + " / " + contact.getPhone() + " / " + contact.getEmail()); 
        } 
    } 
} 
应用类实现

MediatorConveyor类

public abstract class MediatorConveyor{ 
    protected abstract Contact createContact(); 
    protected abstract RandomData createRandomData(); 

    public Contact getContact() { 
        Contact contact = createContact(); 
        RandomData randomData = createRandomData(); 
        contact.setName(randomData.getName()); 
        contact.setPhone(randomData.getPhone()); 
        contact.setEmail(randomData.getEmail()); 
        return contact; 
    } 
} 

Contact类

public class Contact { 
    private String name = null; 
    private String phone = null; 
    private String email = null; 

    public String getName() { 
        return name; 
    } 

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

    public String getPhone() { 
        return phone; 
    } 

    public void setPhone(String phone) { 
        this.phone = phone; 
    } 

    public String getEmail() { 
        return email; 
    } 

    public void setEmail(String email) { 
        this.email = email; 
    } 
} 

RandomData类

public class RandomData { 
    private List<String> alphabetS = new ArrayList<>(Arrays.asList("b,c,d,f,g,h,j,k,l,m,n,p,q,r,s,t,v,x,z".split(","))); 
    private List<String> alphabetG = new ArrayList<>(Arrays.asList("a,e,i,o,u,y".split(","))); 
    private Random random = new Random(); 
    private String name = ""; 
    private String phone = ""; 

    RandomData(){ 
        createName(); 
        createNumberPhone(); 
    } 

    public String getName() { 
        return name; 
    } 

    public String getPhone() { 
        return phone; 
    } 

    public String getEmail() { 
        return name.toLowerCase()+"@mail.ru"; 
    } 

    private void createName() { 
        int countsymbol = 0; 
        while(countsymbol < 5) { 
            countsymbol = random.nextInt(10); 
        } 
        int gls = random.nextInt(2); 
        for(int i=0; i<countsymbol; i++) { 
            List<String> list = null; 
            if(gls == 0) {list = alphabetS; gls=1;} 
            else if(gls == 1) {list = alphabetG; gls=0;} 
            if (i==0) {name += list.get(random.nextInt(list.size())).toUpperCase();} 
            name += list.get(random.nextInt(list.size())); 
        } 
    } 

    private void createNumberPhone() { 
        for(int i=0; i<10; i++) { 
            if(i==3 || i==6 || i==8) {phone += "-";} 
            phone += random.nextInt(10); 
        } 
    } 
} 

内容的提问来源于stack exchange,提问作者Andrew H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:09