실습 5일차_SpEL

 

https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html

 

 Spring SpEL_Collection_Selection

MainClass.java

import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.ListPerson;
import com.dto.Person;

public class MainClass {
	public static void main(String[] args) {
		
		ApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/config/user.xml");
			
		ListPerson listPerson = ctx.getBean("list1", ListPerson.class); //System.out.println(list1);
		List<Person> list1 = listPerson.getList();
		System.out.println("1. 전체 데이터 출력");
		
		for (Person person : list1) {
			System.out.println(person);
		}
		
		ListPerson listPerson2 = ctx.getBean("list2", ListPerson.class); //System.out.println(list1);
		List<Person> list2 = listPerson2.getList();
		System.out.println("2. SpEL 전체 데이터 출력");
		for (Person person : list2) {
			System.out.println(person);
		}
		
		ListPerson listPerson3 = ctx.getBean("list3", ListPerson.class); //System.out.println(list1);
		List<Person> list3 = listPerson3.getList();
		System.out.println("3. SpEL 특정 인덱스 데이터 출력");
		for (Person person : list3) {
			System.out.println(person);
		}
		
		ListPerson listPerson4 = ctx.getBean("list4", ListPerson.class); //System.out.println(list1);
		List<Person> list4 = listPerson4.getList();
		System.out.println("4. SpEL 조건 데이터 출력");
		for (Person person : list4) {
			System.out.println(person);
		}
		
		ListPerson listPerson5 = ctx.getBean("list5", ListPerson.class); //System.out.println(list1);
		List<Person> list5 = listPerson5.getList();
		System.out.println("5. SpEL 멀티 조건 데이터 출력");
		for (Person person : list5) {
			System.out.println(person);
		}
	}
}

ListPerson.java

package com.dto;
import java.util.List;

public class ListPerson {

	List<Person> list;

	public List<Person> getList() {
		return list;
	}

	public void setList(List<Person> list) {
		this.list = list;
	}

	@Override
	public String toString() {
		return "ListPerson [list=" + list + "]";
	}
}

Person.java

package com.dto;

public class Person {
	
	String username;
	int age;
	boolean married;
	double weight;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public boolean isMarried() {
		return married;
	}
	public void setMarried(boolean married) {
		this.married = married;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	@Override
	public String toString() {
		return "Person [username=" + username + ", age=" + age + ", married=" + married + ", weight=" + weight + "]";
	}
	
}

user.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"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

	<util:list id="personList">
		<bean id="p1" class="com.dto.Person" p:username="고길동" p:age="30" p:married="true" p:weight="50" />
		<bean id="p2" class="com.dto.Person" p:username="신길동" p:age="40" p:married="false" p:weight="60" />
		<bean id="p3" class="com.dto.Person" p:username="홍길동" p:age="10" p:married="false" p:weight="70" />
		<bean id="p4" class="com.dto.Person" p:username="이길동" p:age="25" p:married="true" p:weight="60" />
	</util:list>
	
	<bean id="list1" class="com.dto.ListPerson">
		<property name="list" ref="personList" />
	</bean>
	
	<!-- SpEL -->
	<bean id="list2" class="com.dto.ListPerson">
		<property name="list" value="#{personList}"/>
	</bean> 
	
	<!-- SpEL -->
	<bean id="list3" class="com.dto.ListPerson">
		<property name="list" value="#{personList[1]}"/>
	</bean> 
	
	<!-- SpEL -->
	<!-- 행선택(selection) 문법 ===> 참조값.?[조건식] -->
	<bean id="list4" class="com.dto.ListPerson">
		<property name="list" value="#{personList.?[age > 25]}"/>
	</bean> 
	
	<!-- SpEL -->
	<!-- 행선택(selection) 문법 ===> 참조값.?[조건식 and 조건식 or 조건식] -->
	<bean id="list5" class="com.dto.ListPerson">
		<property name="list" value="#{personList.?[age > 25 and married == true]}"/>
	</bean>

</beans>

* 출력 화면 

 

 Spring SpEL_Collection_Projection

MainClass.java

import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.ListPerson;
import com.dto.Person;

public class MainClass {
	public static void main(String[] args) {

		ApplicationContext ctx =
				new GenericXmlApplicationContext("classpath:com/config/user.xml");
		
		ListPerson listPerson1 = ctx.getBean("list1", ListPerson.class);
	    List<String> usernameList = listPerson1.getUsernameList();
	    System.out.println("1. username 프라퍼티 전체 출력");
	    for (String name : usernameList) {
			System.out.println(name);
		}
	
	    ListPerson listPerson2 = ctx.getBean("list2", ListPerson.class);
	    List<Integer> ageList = listPerson2.getAgeList();
	    System.out.println("2. age 프라퍼티 전체 출력");
	    for (int age : ageList) {
			System.out.println(age);
		}
	
	}
}

ListPerson.java

package com.dto;
import java.util.List;

public class ListPerson {

	// selection
	List<Person> list;
	
	// projection
	List<String> usernameList;
	List<Integer> ageList;
	
	public List<String> getUsernameList() {
		return usernameList;
	}

	public void setUsernameList(List<String> usernameList) {
		this.usernameList = usernameList;
	}

	public List<Integer> getAgeList() {
		return ageList;
	}

	public void setAgeList(List<Integer> ageList) {
		this.ageList = ageList;
	}

	public List<Person> getList() {
		return list;
	}

	public void setList(List<Person> list) {
		this.list = list;
	}

	@Override
	public String toString() {
		return "ListPerson [list=" + list + "]";
	}
	
}

Person.java

package com.dto;

public class Person {

	String username;
	int age;
	boolean married;
	double weight;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public boolean isMarried() {
		return married;
	}
	public void setMarried(boolean married) {
		this.married = married;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	@Override
	public String toString() {
		return "Person [username=" + username + ", age=" + age + ", married=" + married + ", weight=" + weight + "]";
	}
}

user.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"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

	<util:list id="personList">
	   <bean id="p1" class="com.dto.Person" p:username="홍길동" p:age="30" p:married="true" p:weight="78.6" />
	   <bean id="p2" class="com.dto.Person" p:username="고길동" p:age="40" p:married="false" p:weight="100.2" />
	   <bean id="p3" class="com.dto.Person" p:username="신길동" p:age="10" p:married="false" p:weight="56.2" />
	   <bean id="p4" class="com.dto.Person" p:username="이길동" p:age="23" p:married="true" p:weight="75.6" />
	</util:list>
	
	 <!-- 
	   selection 문법:  참조변수.?[조건식] , 참조변수.?[조건식 and 조건식 or 조건식] 
	 -->
	 
	 <!-- 
	     projection 문법:  참조변수.![property]  
	 -->
	 <bean id="list1" class="com.dto.ListPerson">
	   <property name="usernameList" value="#{personList.![username]}" />
	 </bean>
	 
	 <bean id="list2" class="com.dto.ListPerson">
	   <property name="ageList" value="#{personList.![age]}" />
	 </bean>
</beans>

* 출력 화면 

 

 Spring SpEL_Collection_Selection & Projection

MainClass.java

import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.ListPerson;
import com.dto.Person;

public class MainClass {
	public static void main(String[] args) {

		ApplicationContext ctx =
				new GenericXmlApplicationContext("classpath:com/config/user.xml");
		
		ListPerson listPerson1 = ctx.getBean("list1", ListPerson.class);
	    List<String> usernameList = listPerson1.getUsernameList();
	    System.out.println("1. username 프라퍼티 조건 출력");
	    for (String name : usernameList) {
			System.out.println(name);
		}
	
	    ListPerson listPerson2 = ctx.getBean("list2", ListPerson.class);
	    List<Integer> ageList = listPerson2.getAgeList();
	    System.out.println("2. age 프라퍼티 조건 출력");
	    for (int age : ageList) {
			System.out.println(age);
		}
	
	}
}

ListPerson.java

package com.dto;
import java.util.List;

public class ListPerson {
	
	// selection
	List<Person> list;
	
	// projection
	List<String> usernameList;
	List<Integer> ageList;
	
	public List<String> getUsernameList() {
		return usernameList;
	}

	public void setUsernameList(List<String> usernameList) {
		this.usernameList = usernameList;
	}

	public List<Integer> getAgeList() {
		return ageList;
	}

	public void setAgeList(List<Integer> ageList) {
		this.ageList = ageList;
	}

	public List<Person> getList() {
		return list;
	}

	public void setList(List<Person> list) {
		this.list = list;
	}

	@Override
	public String toString() {
		return "ListPerson [list=" + list + ", usernameList=" + usernameList + ", ageList=" + ageList + "]";
	}

}

Person.java

package com.dto;

public class Person {
	
	String username;
	int age;
	boolean married;
	double weight;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public boolean isMarried() {
		return married;
	}
	public void setMarried(boolean married) {
		this.married = married;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	@Override
	public String toString() {
		return "Person [username=" + username + ", age=" + age + ", married=" + married + ", weight=" + weight + "]";
	}
	
}

user.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"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

	<util:list id="personList">
	   <bean id="p1" class="com.dto.Person" p:username="고길동" p:age="30" p:married="true" p:weight="78.6" />
	   <bean id="p2" class="com.dto.Person" p:username="신길동" p:age="40" p:married="false" p:weight="100.2" />
	   <bean id="p3" class="com.dto.Person" p:username="홍길동" p:age="10" p:married="false" p:weight="56.2" />
	   <bean id="p4" class="com.dto.Person" p:username="이길동" p:age="23" p:married="true" p:weight="75.6" />
	</util:list>
	
	 <!-- 
	   selection 문법:  참조변수.?[조건식] , 참조변수.?[조건식 and 조건식 or 조건식] 
	 -->
	 
	 <!-- 
	     projection 문법:  참조변수.![property]  
	 -->
	 
	 <!-- 
	     selection 및 projection 조합
	         ==> 참조변수.?[조건식].![property]
	  -->
	 <bean id="list1" class="com.dto.ListPerson">
	   <property name="usernameList" value="#{personList.?[age > 25].![username]}" />
	 </bean>
	 
	 <bean id="list2" class="com.dto.ListPerson">
	   <property name="ageList" value="#{personList.?[married==true].![age]}" />
	 </bean>
</beans>

 

* 출력 화면 

 

 출처

 

 

+ 강의 교재

 

+ Recent posts