- Maven을 이용해 스프링 프레임워크를 사용하는 프로젝트를 생성
- Bean이 무엇인지 이해
- XML형식의 스프링 설정파일의 내용을 이해
- Bean
- ApplicationContext
- DI
1. 메이븐 프로젝트 생성하기 new >> new maven project (Quickstart)
pom.xml 파일에 JDK를 사용하기 위한 플러그인 설정을 추가합니다.
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.or.connect</groupId>
<artifactId>diexam01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>diexam01</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
-------------------------------------추가----------------------------------------------------
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
----------------------------------------------------------------------------------------------
</project>
2. maven project 오른쪽 클릭 >> maven >> Update Project
3. App.java Apptest.java
Bean class란?
예전에는 Visual 한 컴포넌트를 Bean이라고 불렀지만, 근래 들어서는 일반적인 Java클래스를 Bean클래스라고 보통 말합니다.
Bean클래스의 3가지 특징은 다음과 같습니다.
- 기본생성자를 가지고 있습니다.
- 필드는 private하게 선언합니다.
- getter, setter 메소드를 가집니다.
- getName() setName() 메소드를 name 프로퍼티(property)라고 합니다. (용어 중요)
UserBean.java
package kr.or.connect.diexam01;
//빈클래스
public class UserBean {
//필드는 private한다.
private String name;
private int age;
private boolean male;
//기본생성자를 반드시 가지고 있어야 한다.
public UserBean() {
}
public UserBean(String name, int age, boolean male) {
this.name = name;
this.age = age;
this.male = male;
}
// setter, getter메소드는 프로퍼티라고 한다.
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
}
Spring Bean Factory를 이용하여 Bean객체 이용하기
1) pom.xml 파일을 다음과 같이 수정합니다.
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.or.connect</groupId>
<artifactId>diexam01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>diexam01</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version> 4.3.14.RELEASE</spring.version> // <- 설정추가 상수로 사용할수 있도록 도와줌
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Spring maven xml 찾는법
mvnrepository.com/artifact/org.springframework/spring-context
스프링 라이브러리 추가
-----------------------------------------------------------------------------------------------------------------------------------
src > main > resource 폴더 만들기
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="userBean" class="kr.or.connect.diexam01.UserBean"></bean>
</beans>
bean 태그를 하나 입력했는데, 위의 태그는 다음과 같은 의미를 가집니다.
UserBean userBean - new UserBean();
kr.or.connect.diexam01.UserBean userBean = new kr.or.connect.diexam01.UserBean();
// id
ApplicationContext를 이용해서 설정파일을 읽어들여 실행하기
ApplicationContextExam01
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextExam01 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
System.out.println("초기화 완료.");
UserBean userBean = (UserBean)ac.getBean("userBean");
userBean.setName("kim");
System.out.println(userBean.getName());
UserBean userBean2 = (UserBean)ac.getBean("userBean");
if(userBean == userBean2) {
System.out.println("같은 인스턴스이다.");
}
}
}
ApplicationContext ac = new ClasspathXmlApplicationContext(" ");
빈에 들어있는 객체들을 모두 생성해서 메모리에다가 올려놓는다.
DI 확인하기
이번에는 DI 즉 의존성 주입을 확인해보도록 하겠습니다.
Car와 Engine이라는 클래스 2개를 생성합니다.
Engine.java
package kr.or.connect.diexam01;
public class Engine {
public Engine() {
System.out.println("Engine 생성자");
}
public void exec() {
System.out.println("엔진이 동작합니다.");
}
}
Car.java
package kr.or.connect.diexam01;
public class Car {
Engine v8;
public Car() {
System.out.println("Car 생성자");
}
public void setEngine(Engine e) {
this.v8 = e;
}
public void run() {
System.out.println("엔진을 이용하여 달립니다.");
v8.exec();
}
}
위의 Car 클래스가 제대로 동작하도록 하려면 보통 다음과 같은 코드가 작성되어야 한다.
Engine e = new Engine();
Car c = new Car();
c.setEngine( e );
c.run();
1, 2 번째 줄을 Spring 컨테이너에게 맡기기 위해 설정파일에 다음과 같은 코드를 입력
<bean id="e" class="kr.or.connect.diexam01.Engine"></bean>
<bean id="car" class="kr.or.connect.diexam01.Car">
<property name="engine" ref="e"></property>
</bean>
즉, 위의 XML설정은 다음과 같은 의미
Engine e = new Engine();
Car c = new Car();
c.setEngine( e );
이번엔 위의 설정 파일을 읽어들여 실행하는 ApplicationContextExam02.java를 작성
package kr.or.connect.diexam01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextExam02 {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
Car car = (Car)ac.getBean("car");
car.run();
}
}
실행창
자바 config Annotation 이용해서 만들기 다음학습