스프링: 148개의 글
| 스프링 컨테이너(Spring Container), 빈(Bean) 객체 생명 주기 스프링 컨테이너는 자바에서 GenericXmlApplicationContext 객체를 통해 생성되고 이 객체의 close 매서드를 통해 소멸된다. 빈 객체는 스프링 컨테이너가 만들어지고 난 후 생성되며 컨테이너가 소멸될 때 같이 소멸된다. 소멸된다는 의미는 메모리에서 클리어된다는 의미다.public class Main { public static void main(String[] args) { String xmlConfigPath = "classpath:appContext.xml"; GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(xmlConfigP..
| 스프링 의존객체 선택(Select Spring Dependency Object) @Autowired, @Resource, @Inject 어노테이션으로만 자동적으로 객체를 주입할 경우 컨테이너에서 주입할 대상이 여러개여서 의존성을 주입하지 못하는 경우가 발생할 수 있다. 다음과 같이 @Autowired를 통해 객체를 주입하려고 할 때, 컨테이너상에서는 Weapon 인터페이스를 상속한 2개의 bean 객체인 gun과 knife가 존재한다. @Autowired는 먼저 Type을 기준으로 주입할 객체를 정하기 때문에 같은 Type이 스프링 컨테이너 상에 존재할 경우 에러를 내게 된다. appContext.xml public class Player { @Autowired private Weapon weapon..
| 의존객체 자동 주입(Automatic Dependency Injection) 의존 객체 자동 주입(Automatic Dependency Injection)은 스프링 설정파일에서 혹은 태그로 의존 객체 대상을 명시하지 않아도 스프링 컨테이너가 자동적으로 의존 대상 객체를 찾아 해당 객체에 필요한 의존성을 주입하는 것을 말한다. 이것을 구현하는 방법은 @Autowired 또는 @Resource 어노테이션을 사용하여 구현한다. 그리고 이 두 어노테이션은 의존 객체를 찾는 방식에 있어 차이가 있다. @Autowired는 주입하려고 하는 객체의 타입이 일치하는지를 찾고 객체를 자동으로 주입한다. 만약에 타입이 존재하지 않는다면 @Autowired에 위치한 속성명이 일치하는 bean을 컨테이너에서 찾는다. 그리..
| 스프링 빈 범위 지정(Spring Bean Scope) 스프링 빈(Spring Bean)의 범위는 2가지로 나뉜다. 싱글턴(Singleton)과 프로토타입(Prototype)이다. 싱글턴 방식은 스프링 컨테이너(Spring Container)에서 자바 어플리케이션이 특정 bean을 가져올 때 딱 하나 유일한 인스턴스만을 제공하는 방식이다. 이 방식은 bean을 설정할 때 default값이다. 그와 반대로 프로토타입은 특정 bean을 가져올 때 가져올 때마다 다른 인스턴스들을 생성해서 제공하는 방식이다. 다음은 싱글턴, 프로토타입을 xml 설정파일 상에서 어떻게 설정할 것인지를 나타낸 xml 코드다. appContext.xml bean을 설정할 때 scope 속성을 통해 bean의 범위를 명시하면 된다..
| 리스트(List) 및 맵(Map) 자료구조 주입 xml 설정 파일 상에서 새터(Setter) 방식을 이용하여 자바의 리스트(List) 혹은 맵(Map)에 의존성을 주입할 수 있다. Duke Mario Suzy Kate 1 KingCrap 2 IceCream 3 Pork import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.context.support.GenericXmlApplicationContext; class Resturant { private List names; private Map menus; Resturant(){ nam..
| 의존성 주입(DI, Dependency Injection) 의존성 주입(Dependency Injection)은 객체가 필요로하는 어떤 객체를 생성자(Constructor) 혹은 새터(Setter)를 통해서 주입하는 것을 말한다. 저번 포스팅에서 이야기했던 것처럼 의존관계는 간단히 말해 new 라는 키워드를 통해 생성된다. 코드를 짤 때 이런 강결합(Tightly Coupled)를 일으키는 요소를 무분별하게 짜기 시작하면 나중에 어마어마한 유지보수 비용을 지불해야할 때가 오게 된다. 쉽게 생각해보면 된다. 일체형 배터리와 분리형 배터리에서 어떤 것이 나중에 배터리를 갈아끼울 때 더 편리할 것인가? 이 갈아끼운다는 의미는 결국에는 소프트웨어에서 말하는 유지보수다. 그리고 일체형 배터리에서 기계와 배터리..
| 스프링 프레임워크(Spring Framework)란? 스프링 프레임워크는 자바 진영에서 주로 웹 서버 어플리케이션을 만들기 위해 사용하는 프레임워크입니다. 스프링 프레임워크를 설명하기에 앞서 먼저 프레임워크가 무엇인지 알아보도록 하겠습니다. | 프레임워크(Framework) 프레임워크 개발자들이 생산하는 코드 품질 및 개발 속도를 상향 평준화시키기 위해 고안된 규약이자 표준 개발 방법을 제공해주는 어플리케이션입니다. 소프트웨어 개발자들은 이 글을 보고 계시는 여러분도 아시다시피 경력, 재능 그리고 개발자가 가지고 있는 관련 지식에 따라서 급(?)이 많이 나뉘어집니다. 경험 많은 시니어 개발자들과 주니어 개발자들의 차이는 더 어마어마한데요. 이 부분의 간극을 어떤 규약을 지키면서 프로그램을 개발하는 것..
XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현 1. XML 스키마 기반 AOP XML 스키마를 이용해서 AOP를 구현하는 과정은 다음과 같다.1 관련 .jar파일을 클래스패스에 추가한다.2 공통 기능을 제공하는 Advice 클래스를 구현한다.3 XML 설정 파일에서 를 이용해서 Aspect를 설정한다. Advice를 이떤 Pointcut에 적용할지를 지정하게 된다. (1) 공통 기능을 제공한 Advice 클래스를 작성ProfilingAdvice.javaimport org.aspectj.lang.ProceedingJoinPoint; public class ProfilingAdvice {// ProfilingAdvice 클래스는 Around Advice를 구현한 클래스이다.public Objec..
Locale 처리 스프링 제공하는 커스텀 태그는 웹 요청과 관련된 언어 정보를 이용해서 알맞은 언어의 메시지를 출력한다.웹 브라우저의 언어 설정을 한국어(ko_kr)로 했을 때와 영어(en_us)로 했을 때 커스텀 태그가 언어에 따라 알맞은 메시지를 출력해 주는 결과 화면을 보여주고 있다. 실제로, 스프링 MVC는 LocaleResolver를 이용해서 웹 요청과 관련된 Locale을 추출하고, 이 Locale 객체를 이용해서 알맞은 언어의 메시지를 선택하게 된다.본 절에서는 스프링이 제공하는 LocaleResolver를 사용해서 Locale을 변경하는 방법에 대해서 살펴보도록 하겠다. 1. LocaleResolver 인터페이스org,springframework.web.serlvet.LocaleResolv..
ViewResolver 설정 뷰 영역 구현컨트롤러는 최종적으로 결과를 출력할 뷰와 뷰에 전달할 객체를 담고 있는 ModelAndView 객체를 리턴한다.DispatherServlet은 ViewResolver를 사용하여 결과를 출력할 View 객체를 구하고, 구한 View 객체를 이용하여 내용을 생성한다. 1. 컨트롤러 구현 및 설정 추가컨트롤러를 구현하려면 먼저 @Contoller 어노테이션을 클래스에 적용한다. 그리고, @RequestMapping 어노테이션을 이용해서 클라이언트의 요청을 처리할 메서드를 지정한다.package madvirus.spring.chap06.controller;import java.util.Calendar;import org.springframework.stereotype.C..