如何基于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.
相关产品推荐
相关产品推荐

