일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 형변환
- 다형성
- jquery
- while
- 추상클래스
- Validations
- 단축키
- IBatis procedure
- 자바 야구게임
- Random
- 로또
- angular2
- 자바
- full text indexing
- 페이징
- 스프링
- Login with OAuth Authentication
- 상속예제
- 야구게임
- 가변인자
- 전자정부
- 전체
- 전체텍스트
- 다운캐스팅
- 상속
- 25가지 효율적인 sql작성법
- Full text
- 이클립스
- 업캐스팅
Archives
- Today
- Total
nalaolla
Spring Framework: beans - 의존관계 설정 본문
728x90
반응형
Spring Framework: beans - 의존관계 설정
생성자를 이용한 의존관계 설정방법
클래스 작성
package com.sp1; public interface User{ public String result(); } | cs |
package com.sp1; public class UserImpl implements User { private String name; private int age; public UserImpl() { name = "김혜진"; age = 35; } public UserImpl(String name, int age) { this.name = name; this.age = age; } public String result() { return name + "님의 나이는" + age + "세후니?"; } } | cs |
package com.sp1; public class TestService { public User user; public TestService(User user) { this.user = user; } public String getData() { if(user != null) return user.result(); return null; } } | cs |
xml 설정
<!--com/sp1/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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"> <!-- 객체생성(인자가없는생성자호출) --> <bean id="user1" class="com.sp1.UserImpl"/> <!-- 객체생성(인자가있는생성자호출) --> <bean id="user2" class="com.sp1.UserImpl"> <constructor-arg value="이형근"/> <constructor-arg value="40"/> </bean> <!-- 객체생성 및 생성자를 통한 의존관계 설정 --> <bean id="testService1" class="com.sp1.TestService"> <constructor-arg ref="user1"/> <!-- ref : 참조형 변수를 뜻함 --> </bean> </beans> | cs |
실행
package com.sp1; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ResultMain { public static void main(String[] args) { /* - BeanFactory : 스프링 컨테이너 생성 * - ApplicationContext : BeanFactory 를 상속받은 인터페이스로 * 빈객체의 라이플사이클 관리, 국제화, 이벤트처리 등의 기능등이 확장 * -ClassPathXmlApplicationContext : 클래스 패스에 위치한 xml 파일로부터 설정파일을 로딩 */ AbstractApplicationContext context = new ClassPathXmlApplicationContext("com/sp1/applicationContext.xml"); //스프링 컨테이너에서 빈 객체를 가져옴 TestService service = (TestService)context.getBean("testService1"); System.out.println(service.getData()); } } | cs |
result → 김혜진님의 나이는35세후니?
프로퍼티를 이용한 의존관계 설정방법
클래스 작성
public interface User { public String result(); } | cs |
package com.sp2; public class UserImpl implements User { private String name, tel; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getMessage() { return name + " : " + tel + " : " + age; } } | cs |
public class UserService { private User user; public void setUser(User user) { this.user = user; } public void print() { System.out.println(user.getMessage()); } } | cs |
xml 설정
<!-- com/sp2/applicationContext.xml --> <!-- 객체생성(인자가 없는 생성자) 및 프로퍼티 설정 --> <!-- 프로퍼티를 설정하기 위해서는 setter가 존재해야함 --> <bean id="user1" class="com.sp2.UserImpl"> <!-- 객체생성 → user1 : 식별자 --> <property name="name" value="스프링"/> <!-- 프로퍼티 설정방법-1 --> <property name="tel"> <value type="java.lang.String">010-000-0000</value> <!-- 프로퍼티 설정방법-2 --> </property> <property name="age" value="20"/> </bean> <!-- 객체 생성 및 프로퍼티를 이용한 의존관계 설정(setter필요) --> <bean id="userService" class="com.sp2.UserService"> <!-- <property name="user" ref="user1"/> --> <property name="user"> <ref bean="user1"/> </property> <!-- 위에서 만든 객체 user1를 userService의 매개변수로 할당 --> </bean> | cs |
실행
package com.sp2; public class ResultMain { public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("com/sp2/applicationContext.xml"); //스프링 컨테이너에서 bean객체를 가져옴 //UserService service = (UserService)context.getBean("userService1"); UserService service = context.getBean(UserService.class); service.print(); } } | cs |
결과: '스프링: 010-000-0000 : 20'
순수 자바 코드로 바꾸면 아래와 같다.
UserImpl ui = new UserImpl(); UserService us = new UserService(); ui.setAge(20); ui.setName("스프링"); ui.setTel("010-000-0000"); User user = ui; us.setUser(user); us.print(); | cs |
p 네임스페이스를 이용한 의존관계 설정
클래스 작성
다른것과 같다. 생략
xml 설정
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" <!-- com/sp2/applicationContext.xml --> <!-- p 네임스페이스를 이용한 프로퍼티 설정 --> <bean id="user2" class="com.sp2.UserImpl" p:name="자바" p:tel="010-1111-1111" p:age="30"/> <!-- p 네임스페이스를 이용한 의존관계설정 --> <bean id="userService2" class="com.sp2.UserService" p:user-ref="user2"/> </beans> | cs |
컬렉션/맵
클래스 작성
package com.sp3; public class UserImpl implements User { private String name; private Map<String, String> address; private List<String> hobby; public void setName(String name) { this.name = name; } public void setAddress(Map<String, String> address) { this.address = address; } public void setHobby(List<String> hobby) { this.hobby = hobby; } public String getData() { String str = "이름" + name; str+="\n======================"; str+="\n친구주소록............"; Iterator<String> it = address.keySet().iterator(); while(it.hasNext()) { String n = it.next(); String a = address.get(n); str += "\n" + n + " " + a; } str += "\n취미................."; for(String s : hobby) { str += "\n" + s; } return str; } } | cs |
xml 설정
<!-- 컬렉션 타입 프로퍼티 설정 --> <bean id="user" class="com.sp3.UserImpl"> <property name="name" value="우앙굳"/> <property name="address"> <map> <entry> <key><value>이상해</value></key> <value>서울</value> </entry><!-- 맵에 값 할당방법-1 --> <entry key="이이이" value="부산"/> <!-- 맵에 값 할당방법-2 --> <!-- <entry key-ref="객체" value-ref="객체2"/> --> </map> </property> <property name="hobby"> <list> <value>소개팅</value> <value>운동</value> <value>잠자기</value> </list> </property> </bean> <!-- <bean id="sss" class="com.sp3.UserService"> --> <!-- <property name="user" p:user-ref="uuu"/> --> <!-- </bean> --> <bean id="sss" class="com.sp3.UserService" p:user-ref="user"/> | cs |
<bean id="sss" class="com.sp3.UserService" p:user-ref="user"/> 이 부분을 autowire 속성을 이용해 자동으로 찾도록 설정할 수 있다:
<!-- 의존관계 자동설정 --> <!-- 프로퍼티와 동일한 id를 갖는 빈객체로 의존관계 설정(setter 필요) --> <bean id="sss" class="com.sp3.UserService" autowire="byName"/> <!-- 프로퍼티와 동일한 타입의 의존관계를 자동설정 --> <bean id="sss" class="com.sp3.UserService" autowire="byType"/> | cs |
단, 이 방법은 같은 이름의 클래스가 둘 이상일 경우 에러가 발생할 가능성이 매우 높다.
실행
package com.sp3; public class ResultMain { public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("com/sp3/applicationContext.xml"); //스프링 컨테이너에서 bean객체를 가져옴 UserService service = (UserService)context.getBean("sss"); System.out.println(service.result()); } } | cs |
728x90
반응형
'SPRING' 카테고리의 다른 글
Spring Framework: MVC 작성방법 (non-annotation) (0) | 2016.05.31 |
---|---|
Spring Framework: beans - xml 태그 정리 (0) | 2016.05.31 |
Spring Framework: 포워딩/리다이렉션 (0) | 2016.05.31 |
@RequestParam (0) | 2016.05.31 |
@ModelAttribute (0) | 2016.05.31 |