공부방
스프링 기초 본문
Framework
- 사전적 의미 : (건물 등의)뼈대, (판단/결정 등을 위한) 틀
- SW에서의 의미 : SW 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합
사용하는 이유
- 웹 어플리케이션을 개발하기 위해서는 많은 기본 기능을 설계, 작성해야 한다.(요청처리, 세션관리 등)
- 공통으로 사용되는 기본기능들을 일관되게 사용할 수 있으면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경을 쓰면 되기 때문에 생산성이 높아진다.
- 개발자 입장에서는 완성된 구조에 맡은 기능을 개발하여 넣어주면 되기 때문에 개발 시간을 단축할 수 있다.
특징
- POJO(Plain Old Java Object->원래 방식) 방식의 프레임워크
- 의존성 주입(Dependency Injection)을 통한 객체관계 구성
- 관점 지향 프로그래밍(AOP, Aspect Oriented Programming)
- 제어 역전(IoC, Inversion of Control)
- 높은 확장성과 다양한 라이브러리
의존 관계 역전
Class A 객체가 어떤 일을 처리하기 위해서 Class B의 객체의 도움을 받아야만 일을 처리할 수 있다면 'Class A는 Class B에 의존한다.' 라고 표현
package com.ssafy.di1;
//데스크톱을 반환하는 클래스
public class Desktop {
//필드명 작성
//CPU, 그래픽카드, 키보드 등등 사양
//정보를 반환하는 메서드
public String getInfo() {
return "데스크톱";
}
}
==========================================================
package com.ssafy.di1;
public class Programmer {
//캡슐화 적용해보자.
private Desktop computer;
public Programmer() {
computer = new Desktop();
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 한다.");
}
}
==========================================================
package com.ssafy.di1;
public class Test {
public static void main(String[] args) {
Programmer p = new Programmer();
//테스트 클래스 안에 그 안에 데스크탑이 하나 만들어져 생성된 프로그래머 객체가 만들어진다.
p.coding();
}
}
//
데스크톱으로 개발을 한다.
여기서는 Programmer가 Desktop 클래스에 의존성을 가지고 있다.
여기서 가지는 의존성 : 객체 생성, 타입
Desktop에 대한 객체생성 의존성 Programmer->Test로 의존 관계 역전
package com.ssafy.di2;
public class Desktop {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
===============================================================
package com.ssafy.di2;
public class Programmer {
//캡슐화 해보자
private Desktop computer;
//더이상 new를 하지않고 외부에서 만든 생성자를 넣어준다.
//객체생성 의존성 제거
public Programmer(Desktop computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
===============================================================
package com.ssafy.di2;
public class Test {
public static void main(String[] args) {
Desktop computer = new Desktop();
Programmer p = new Programmer(computer);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
생성자를 이용한 타입 의존성 주입
package com.ssafy.di3;
//느슨한 결합을 위한 인터페이스
public interface Computer {
String getInfo();
}
===============================================================
package com.ssafy.di3;
public class Desktop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
===============================================================
package com.ssafy.di3;
public class Laptop implements Computer{
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "노트북";
}
}
===============================================================
package com.ssafy.di3;
public class Programmer {
//캡슐화
private Computer computer;
//객체 생성 의존성을 제거하기 위해서 얘가 만드는 것이 아니라
//만들어진 컴퓨터를 넣어주겠다.
//데스크톱, 랩톱이 아닌 컴퓨터로 바꾸면 느슨한 결합을 하겠다.
public Programmer(Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
===============================================================
package com.ssafy.di3;
public class Test {
public static void main(String[] args) {
Desktop computer1 = new Desktop();
Laptop computer2 = new Laptop();
Programmer p = new Programmer(computer1);
p.coding();
Programmer p2 = new Programmer(computer2);
p2.coding();
}
}
//
데스크톱으로 개발을 합니다.
노트북으로 개발을 합니다.
설정자를 이용한 타입 의존성 주입
package com.ssafy.di3;
//느슨한 결합을 위한 인터페이스
public interface Computer {
String getInfo();
}
============================================================
package com.ssafy.di3;
public class Desktop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
============================================================
package com.ssafy.di3;
public class Laptop implements Computer{
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "노트북";
}
}
============================================================
package com.ssafy.di3;
public class Programmer {
//캡슐화
private Computer computer;
//객체 생성 의존성을 제거하기 위해서 얘가 만드는 것이 아니라
//만들어진 컴퓨터를 넣어주겠다.
//데스크톱, 랩톱이 아닌 컴퓨터로 바꾸면 느슨한 결합을 하겠다.
public Programmer(Computer computer) {
this.computer = computer;
}
//setter(설정자) 이용한 주입
public void setComputer(Computer computer) {
this.computer=computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
============================================================
package com.ssafy.di3;
public class Test {
public static void main(String[] args) {
Desktop computer1 = new Desktop();
Laptop computer2 = new Laptop();
Programmer p = new Programmer(computer1);
// p.coding();
p.setComputer(computer2);
p.coding();
Programmer p2 = new Programmer(computer2);
// p2.coding();
}
}
//
노트북으로 개발을 합니다.
새로운 클래스를 만들어 타입 의존성 주입
package com.ssafy.di4;
public interface Computer {
String getInfo();
}
==========================================================
package com.ssafy.di4;
public class ComputerFactory {
//이러한 컴퓨터 줘봐잉
public static Computer getComputer(String type) {
if(type.equals("D")) {
return new Desktop();
}else if (type.equals("L")) {
return new Laptop();
}
return null;
}
}
==========================================================
package com.ssafy.di4;
public class Desktop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
==========================================================
package com.ssafy.di4;
public class Laptop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "노트북";
}
}
==========================================================
package com.ssafy.di4;
public class Programmer {
private Computer computer;
//생성자가 있어야 객체 생성 가능
public Programmer() {
}
public Programmer(Computer computer) {
this.computer = computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
==========================================================
package com.ssafy.di4;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Programmer p = new Programmer();
Computer computer = ComputerFactory.getComputer(sc.next());
p.setComputer(computer);
p.coding();
computer = ComputerFactory.getComputer(sc.next());
p.setComputer(computer);
p.coding();
}
}
//
D
데스크톱으로 개발을 합니다.
L
노트북으로 개발을 합니다.
D
데스크톱으로 개발을 합니다.
D
데스크톱으로 개발을 합니다.
//여기서 두 데스크탑은 다른 데스크탑을 말한다.
getComputer를 통해 new를 통해서 새로운 컴퓨터들이 나온다. 따라서 다른 데스크탑을 말하는 것. 이렇게 새로운 것들을 만들어 낭비를 피하기 위해 싱글턴이 기본이다.
Spring IoC Container
Container
- 스프링에서 핵심적인 역할을 하는 객체를 Bean이라고 하며 Container는 Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리를 담당한다.
Spring Container 빌드
- Project 생성 후->Maven Project로 변경
- pom.xml->Spring Context 의존성 추가
- mvnrepository 사이트에 들어가 Spring context에 들어가서 가장 사람들이 많이 받거나 최신 것을 복붙해서 사용하면 됨.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Spring_01_DI_2</groupId>
<artifactId>Spring_01_DI_2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
여기에 추가해주면 됨.
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.18</version>
</dependency>
</dependencies>
</project>
Spring Container 빌드
Bean 등록(풀패키지 명 작성) 후 스프링 컨테이너와 getBean()을 이용하여 객체 가져오기
package com.ssafy.di;
public interface Computer {
String getInfo();
}
=============================================================
package com.ssafy.di;
public class Desktop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
=============================================================
package com.ssafy.di;
public class Laptop implements Computer{
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "노트북";
}
}
=============================================================
package com.ssafy.di;
public class Programmer {
private Computer computer;
// 기본 생성자
public Programmer() {
}
public Programmer(Computer computer) {
this.computer = computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo() + "으로 개발을 합니다.");
}
}
=============================================================
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Spring_01_DI_2</groupId>
<artifactId>Spring_01_DI_2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.18</version>
</dependency>
</dependencies>
</project>
=============================================================
<?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 class="com.ssafy.di.Desktop" id="desktop"></bean>
<bean class="com.ssafy.di.Programmer" id="programmer"></bean>
</beans>
=============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨에티너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
//컨테이너로부터 객체를 가져오겠다.
Programmer p = (Programmer) context.getBean("programmer");
Desktop desktop = context.getBean("desktop", Desktop.class);
//이게 더 좋아보임.
p.setComputer(desktop);
p.coding();
Desktop d = context.getBean("desktop", Desktop.class);
Desktop d2 = context.getBean("desktop", Desktop.class);
System.out.println(d);
System.out.println(d2);
System.out.println(d == d2);
}
}
//
데스크톱으로 개발을 합니다.
com.ssafy.di.Desktop@598067a5
com.ssafy.di.Desktop@598067a5
true
나머진 위의 코드와 동일
<?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 class="com.ssafy.di.Desktop" id="desktop" scope="prototype"></bean>
<bean class="com.ssafy.di.Programmer" id="programmer"></bean>
</beans>
//
위에 코드에서 desktop 줄을
<bean class="com.ssafy.di.Desktop" id="desktop" scope="prototype"></bean>
scope="prototype"추가함
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨에티너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
// System.out.println("1~~");
//컨테이너로부터 객체를 가져오겠다.
Programmer p = (Programmer) context.getBean("programmer");
Desktop desktop = context.getBean("desktop", Desktop.class);
//이게 더 좋아보임.
p.setComputer(desktop);
// System.out.println("2~~");
p.coding();
Desktop d = context.getBean("desktop", Desktop.class);
Desktop d2 = context.getBean("desktop", Desktop.class);
System.out.println(d);
System.out.println(d2);
System.out.println(d == d2);
}
}
//
데스크톱으로 개발을 합니다.
com.ssafy.di.Desktop@3c0ecd4b
com.ssafy.di.Desktop@14bf9759
false
생성자(constructor-arg)를 이용하여 의존성 주입-<ref>,<value>와 같이 하위 태그를 이용하여 설정 or 속성을 이용하여 설정
나머진 위의 코드와 동일
<?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 class="com.ssafy.di.Desktop" id="desktop"></bean>
<bean class="com.ssafy.di.Programmer" id="programmer">
<constructor-arg ref="desktop"></constructor-arg>
</bean>
</beans>
==============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
//컨테이너로부터 객체를 가져오겠다.
Programmer p = (Programmer) context.getBean("programmer");
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
설정자(setter)를 이용하여 의존성 주입-<ref>,<value>와 같이 하위 태그를 이용하여 설정 or 속성을 이용하여 설정
<?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 class="com.ssafy.di.Desktop" id="desktop"></bean>
<bean class="com.ssafy.di.Laptop" id="laptop"></bean>
<bean class="com.ssafy.di.Programmer" id="programmer">
<!-- name에는 설정자 이름을 넣을것! set 떼고 앞에 소문자로 바꾼거랑 동일 -->
<property name="computer" ref="laptop"></property>
</bean>
setter를 쓰기 위해서는 property를 써야됨.
</beans>
============================================================
package com.ssafy.di;
public class Programmer {
private Computer computer;
public Programmer() {
}
public Programmer(Computer computer) {
// computer = new Desktop();
this.computer = computer;
}
public void setComputer(Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
//컨테이너로부터 객체를 가져오겠다.
Programmer p = (Programmer) context.getBean("programmer");
p.coding();
}
}
빈(Bean) 생성 및 설정(@Component)
- Bean 생성 - @Component
- 생성되는 Bean의 이름은 클래스의 첫 글자를 소문자로 바꾼 것이다. ex) Desktop->desktop
- 스프링은 @Component, @Service, @Controller, @Repository의 Stereotype Annotation을 제공
- 각 @Service, @Controller, @Repository는 목적에 맞는 구체적인 사용을 위한 @Component의 확장. 목적에 맞게 구체화하여 사용하면 Spring에서 더 효율적으로 사용 가능
나머지 코드는 위와 동일
package com.ssafy.di;
import org.springframework.stereotype.Component;
@Component
public class Desktop implements Computer {
// 필드명 작성
// CPU, 그래픽카드, 키보드 등등 사양
public String getInfo() {
return "데스크톱";
}
}
============================================================
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Programmer {
// @Autowired
// @Qualifier("laptop")
private Computer computer;
// public Programmer() {
// }
// @Autowired
public Programmer(Computer computer) {
this.computer = computer;
}
// @Autowired
// public void setComputer(@Qualifier("desktop") Computer computer) {
// this.computer = computer;
// }
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
============================================================
resource의 밑에 Source옆에 Namespaces의 context를 추가한다.
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.ssafy.di"></context:component-scan>
</beans>
모든 @Component가 붙은 것들을 Bean처리해주겠다
============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("programmer", Programmer.class);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
이렇게 value를 사용하여 이름을 간단하게도 가능
나머지 코드는 위와 동일
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component(value='p')
public class Programmer {
// @Autowired
// @Qualifier("laptop")
private Computer computer;
// public Programmer() {
// }
// @Autowired
public Programmer(Computer computer) {
this.computer = computer;
}
// @Autowired
// public void setComputer(@Qualifier("desktop") Computer computer) {
// this.computer = computer;
// }
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("p", Programmer.class);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
의존성 주입(@Autowired)
나머진 위의 코드와 동일
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Programmer {
private Computer computer;
public Programmer() {
}
@Autowired
//computer타입과 spring컨테이너에서 bean으로 등록돼 있는 타입과
//동일한게 있다면 알아서 넣어준다.
public Programmer(Computer computer) {
this.computer = computer;
}
public void setComputer(@Qualifier("desktop") Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
============================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("programmer", Programmer.class);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
Qualifier
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Programmer {
@Autowired
@Qualifier("laptop")
private Computer computer;
public Programmer() {
}
//computer타입과 spring컨테이너에서 bean으로 등록돼 있는 타입과
//동일한게 있다면 알아서 넣어준다.
public Programmer(Computer computer) {
this.computer = computer;
}
public void setComputer (Computer computer) {
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
===========================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("programmer", Programmer.class);
p.coding();
}
}
//
노트북으로 개발을 합니다.
생성자 위에 Qualifier를 사용하여 id를 입력해 우선순위를 만들어줄 수 있다.
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Programmer {
private Computer computer;
public Programmer() {
}
//computer타입과 spring컨테이너에서 bean으로 등록돼 있는 타입과
//동일한게 있다면 알아서 넣어준다.
public Programmer(Computer computer) {
this.computer = computer;
}
@Autowired
public void setComputer(@Qualifier("desktop") Computer computer) {
//@Qualifier에는 id를 적어줘야됨
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
===========================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("programmer", Programmer.class);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
set뒤에도 Qualifier를 사용하여 우선순위를 만들어 줄 수 있다.
package com.ssafy.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Programmer {
@Autowired
@Qualifier("laptop")
private Computer computer;
public Programmer() {
}
//computer타입과 spring컨테이너에서 bean으로 등록돼 있는 타입과
//동일한게 있다면 알아서 넣어준다.
public Programmer(Computer computer) {
this.computer = computer;
}
@Autowired
public void setComputer(@Qualifier("desktop") Computer computer) {
//@Qualifier에는 id를 적어줘야됨
this.computer = computer;
}
public void coding() {
System.out.println(computer.getInfo()+"으로 개발을 합니다.");
}
}
===========================================================
package com.ssafy.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//스프링 컨테이너 객체를 빌드
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
Programmer p = context.getBean("programmer", Programmer.class);
p.coding();
}
}
//
데스크톱으로 개발을 합니다.
둘 다 입력한다면 set이 더 힘이 강하게 들어가는 것 같다.
'스프링' 카테고리의 다른 글
MyBatis (0) | 2023.04.19 |
---|---|
File Upload&File Download (0) | 2023.04.18 |
Interceptor (0) | 2023.04.17 |
Spring Web MVC (0) | 2023.04.13 |
Spring AOP (0) | 2023.04.12 |