2019. 5. 18. 01:51ㆍJAVA Back-End/Spring
eclipse에서 Maven Project를 생성.
(IDE : eclipse / Build도구는 Maven으로 하겠습니다)
Group Id는 패키지 이름으로 사실 네이밍이 굉장히 중요하지만 kr.or.connect으로 간단히 예제용으로 짓고,
Artifact Id는 프로젝트 이름 diexample01 이렇게 임의로 우선 만들어서 생성합니다!
프로젝트가 생성되면 pom.xml을 먼저 열어서
<build>...</build> 태그를 추가해서 jdk1.8을 사용하도록 합니다. 보통 1.5로 디폴트 세팅이 되어 있는 경우가 많습니다.
<dependency><groupId>org.springframework</groupId></dependency> 스프링 프레임워크 dependency를 추가해주시고!
properties의 <spring.version>4.3.14.RELEASE<spring.version>을 추가 해줍니다. properties에 등록된 태그는 상수처럼 사용할 수 있습니다. 스프링 버전을 dependency가 지금은 하나지만 여러 개가 추가되면 일일히 넣어주고 업데이트 될 때마다 각각의 dependency를 변경해줘야하겠죠... 하지만 상수처럼 사용하면 이런 불편함이 줄겠죠:>
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>
<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>
아래 xml파일은 고유 한 id를 다른 bean에 할당하고 Spring 소스 파일에 영향을 주지 않으면서 다른 값을 가진 객체의 생성을 제어하는 데 사용됩니다.
Spring Application이 메모리에 로드되면, 프레임워크는 아래의 구성 파일을 사용해 정의 된 모든 Bean을 만들고 <bean>태그에 정의 된 고유 Id를 할당합니다.
(<bean> 태그 안에 <property name="message" value="hello world!"/>처럼 <property> 태그를 사용해 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="userBean" class="kr.or.connect.diexam01.UserBean"></bean>
</beans>
자, 이제 실제 세팅은 끝! 코드를 작성해봅시다!
UserBean.java는 JDBC프로그래밍을 할 때 getter/setter로 private에 접근해서 Dto(Data transfer Object)를 만들어 데이터를 교환한 것처럼 이런 Bean클래스를 작성합니다.
UserBean.java
package kr.or.connect.diexam01;
public class UserBean {
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;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = 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;
}
}
ApplicationContext를 이용해서 설정 파일을 읽어들여 실행할 소스 코드를 작성합니다.
ApplicationContextExam01.java
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생성
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
System.out.println("초기화 완료.");
// getBean()은 object타입으로 리턴하니까 UserBean 클래스 타입으로 형변환
UserBean userBean = (UserBean) ac.getBean("userBean");
userBean.setName("Jang");
System.out.println(userBean.getName());
UserBean userBean2 = (UserBean) ac.getBean("userBean");
System.out.println(userBean2.getName());
if(userBean == userBean2) {
System.out.println("둘은 같은 인스턴스 입니다.");
System.out.println("ApplicationContext는 싱글톤 패턴으로 사용자가 계속 getBean을 요청해도 하나 만든 bean을 이용합니다..");
System.out.println("ApplicationContext는 interface로 이것을 구현한 다양한 컨테이너가 존재할 것 입니다");
System.out.println("그 중 이런 xml파일을 classpath에서 읽어들여서 사용하는 객체가 ClassPathXmlApplicationContext다");
}
((ClassPathXmlApplicationContext) ac).close();
}
}
Bean : 스프링이 관리하는 인스턴스. 개발자가 인스턴스 생성하고 호출, 관리하는 게 아니라 스프링이 제공하는 container를 통해 관리되는 인스턴스. (그렇다고 스프링을 사용하는 application에서 만들어지는 모든 object가 다 Bean은 아니다!!!)
Bean은 기본적으로 싱글톤 스코프! 다시 말해, Bean으로 지정된 클래스는 Spring container에 1개의 인스턴스로만 존재.
ApplicationContext : Spring이 제공하는 IoC 컨테이너 중 하나.(나머지는 BeanFactory) Bean을 관리하는 BeanFactory의 기능은 기본으로 더 많은 서비스를 추가 제공합니다(BeanFactory 상위호환). ApplicationContext는 BeanFactory를 상속하는 Interface입니다.
'JAVA Back-End > Spring ' 카테고리의 다른 글
스프링과 객체지향, SOLID (0) | 2023.03.28 |
---|---|
[Spring] Spring MVC (0) | 2019.06.08 |
[Spring] Spring JDBC (0) | 2019.06.07 |
[Spring] IoC / DI 컨테이너 (0) | 2019.05.16 |
[Spring] Spring Framework? (0) | 2019.05.16 |