wannaqueen
  • Initial page
  • Spring boot
    • 스프링부트의 소개
      • 8. 스프링 부트 소개 by ks
      • 9. 시스템 요구사항 by ks
      • 10. 스프링 부트 설치 by ks
      • 11. 첫 번째 Spring Boot 애플리케이션 개발하기 by ys
        • 11.1 POM 만들기
        • 11.2 클래스 패스 의존성 추가하기
        • 11.3 코드 작성하기
        • 11.4 예제 실행하기
        • 11.5 실행 가능한 jar 만들기
      • 12. 다음에 읽을 내용 by ys
      • 13. 빌드 시스템 by sh
        • 13.1 의존성 관리
        • 13.2 Maven
        • 13.3 Gradle
        • 13.4 Ant
        • 13.5 Starters
    • 스프링부트의 기능
      • 23. Spring Application by ys
        • 23.1 startup 실패
        • 23.2 배너를 내가 원하는 대로 바꾸기
        • 23.3 SpringApplication 커스터마이징하기
        • 23.4 Fluent Builder API
        • 23.5 어플리케이션 이벤트와 리스너들
        • 23.6 웹 환경
        • 23.7 Application 인자에 접근하기
        • 23.8 ApplicationRunner 또는 CommandLineRunner 사용
        • 23.9 어플리케이션 종료
        • 23.10 관리자 기능
      • 24. 외부화된 구성 by ys
        • 24.1 임의의 값 구성
        • 24.2 명령행 특성 액세스
        • 24.3 응용 프로그램 속성 파일
        • 24.4 프로파일 관련 프라퍼티들
        • 24.5 프라퍼티들에서 플레이스홀더들
        • 24.6 속성의 암호화
        • 24.7 속성대신 yaml 사용하기 - 다시
        • 24.8 Type-safe Configuration Properties
      • 25. 프로파일 by ks
        • 25.1 Active 프로파일 더하기
        • 25.2 프로그램적으로 프로파일 세팅
        • 25.3 프로파일 별 구성파일
      • 26. 로깅 by ks
        • 26.1 로그 형식
        • 26.2 콘솔 출력
        • 26.3 파일 출력
        • 26.4 로거 레벨
        • 26.5 로그 그룹
        • 26.6 사용자 정의 로그 설정
        • 26.7 로그백 확장
      • 27 국제화 by ks
      • 28. SQL 데이터베이스 작업 by sh
      • 29. NoSQL 기술 사용 by sh
      • 30. 메시징 by sh
      • 31. 이메일 전송 by sh
      • 28. JSON by sh (다시 시작!)
        • 28.1 Jackson
        • 28.2 Gson
        • 28.3 JSON-B
      • 29. 웹 응용 프로그램 개발 by sh
        • 29.1 The “Spring Web MVC Framework”
        • 29.2 The “Spring WebFlux Framework”
        • 29.3 JAX-RS and Jersey
        • 29.4 내장된 서블릿 컨테이너 지원
        • 29.5 내장된 반응형 서버 지원
        • 29.6 반응형 서버 리소스 구성
      • 30. Security by ys
        • 30.1 MVC 보안
        • 30.2 WebFlux 보안
        • 30.3 OAuth2
        • 30.4 Actuator 보안
      • 31. SQL 데이터베이스 작업 by ys
        • 31.1 Configure a DataSource
        • 31.2 JdbcTemplate 사용
        • 31.3 JPA와 스프링 데이터 JPA
        • 31.4 스프링 데이터 JDBC
        • 31.5 H2의 웹 콘솔 사용
        • 31.6 jOOQ 사용하기
      • 32. NoSQL 기술로 작업하기 by ks
      • 33 Caching by ks
      • 34. 메시징
        • 34.1 JMS by sh
        • 34.2 AMQP by sh
        • 34.3 Apache Kafka Support by ys
      • 35.REST 서비스 호출 RestTemplate
        • 35.1 RestTemplate 사용자 정의
      • 36. REST 서비스 호출 WebClient by ys
      • 37. 유효성 확인 by ys
      • 38. 이메일 보내기 by ys
      • 39. JTA를 이용한 분산 트랜잭션 by ys
      • 40.하젤캐스트(Hazelcast) by ys
      • 41. Quartz Scheduler by ys
      • 42. 작업 실행 및 스케줄링 by ys
      • 43. 스프링 통합 by ys
      • 44. Spring 세션 by ys
      • 45. JMX를 통한 모니터링 및 관리 by ys
      • 46. Testing by sh
        • 46.3 Testing Spring Boot Applications
          • 46.1~46.3.10
          • 46.3.11 자동 구성된 Spring WebFlux 테스트
          • 46.3.12 자동 구성된 Data JPA 테스트들
          • 46.3.13 자동 구성된 JDBC 테스트들
          • 46.3.14 자동 구성된 Data JDBC 테스트들
          • 46.3.15 자동 구성된 JOOQ 테스트들
          • 46.3.16 자동 구성된 Data MongoDB 테스트들
          • 46.3.17 자동 구성된 Data Neo4j 테스트
          • 46.3.18 자동 구성된 Data Redis 테스트들
          • 46.3.19 자동 구성된 Data LDAP 테스트들
          • 46.3.20 자동 구성된 REST 클라이언트
          • 46.3.21자동 구성된 Spring REST Docs 테스트
          • 46.3.22 추가적인 자동 구성 및 슬라이스
          • 46.3.23 사용자 구성 및 분할
          • 46.3.24 Spock을 사용하여 스프링 부팅 응용 프로그램 테스트
      • 47. 웹 소켓 by sh
      • 48. 웹 서비스 by sh
        • 48.1WebServiceTemplate로 웹 서비스 호출하기
      • 49. 자신만의 자동 구성 생성
        • 49.1 자동 구성된 빈 이해하기 by sh
        • 49.2 자동 구성 후보 찾기 by sh
        • 49.3 Condition 어노테이션들 by sh
        • 49.4 자동구성 테스팅 by ks
        • 49.5 자신만의 스타터 생성하기 by ks
      • 50. Kotlin support by ys
      • 51. What to Read Next by ys
      • 52. Production-ready 기능 활성화 by ys
      • 53. Endpoints
        • 53.1 엔드 포인트 활성화 by ys
        • 53.2 엔드 포인트 노출 by ys
        • 53.3 HTTP endpoints 보안 by ys
        • 53.4 Endpoints 구성
        • 53.5 액츄에이터 웹 엔드 포인트 용 하이퍼 미디어 by ys
        • 53.6 CORS 지원 by ys
        • 53.7 커스텀 엔드포인트 확장 by ks
        • 53.8 Health 정보 by ks
        • 53.9 어플리케이션 정보 by sh
      • 54. HTTP를 통한 모니터링 및 관리 by sh
        • 54.1 관리 엔드 포인트 경로 사용자 정의
        • 54.2 관리 서버 포트 사용자 정의
        • 54.3 관리 관련 SSL 구성
        • 54.4 관리 서버 주소 사용자 정의
        • 54.5 HTTP 끝점 사용안하기
  • spring 5.0
    • 1. IoC 컨테이너
      • 1.1 스프링 IoC 컨테이너와 빈의 도입 by sh
      • 1.2 컨테이너 by ys
      • 1.3 빈 개요 by ks
      • 1.4 의존성 by ks, ys, sh
        • 1.4.1 의존성 주입 by ks
        • 1.4.2 의존성과 configuration by ks
        • 1.4.3 depends-on 사용 by ys
        • 1.4.4 게으른-초기화된 bean by ys
        • 1.4.5 Autowiring Collaborators by ys
        • 1.4.6 메소드 주입 by sh
      • 1.5. 빈의 범위 by sh
      • 1.6 빈의 특성 커스터마이징하기 by ys
        • 1.6.1 라이프 사이클 콜백
        • 1.6.2 ApplicationContextAware과BeanNameAware
        • 1.6.3 기타 Aware인터페이스
      • 1.7 빈 정의 상속by ys
        • 1.7.1 빈 정의 상속
      • 1.8 컨테이너 확장 포인트 by ks
      • 1.9 어노테이션 기반의 컨테이너 구성 by sh
      • 1.10 클래스패스 스캔 및 관리 by ys
        • 1.10.1 @Component 및 추가 스테레오 타입 어노테이션
        • 1.10.2 meta-annotation 및 composed annotation 사용
        • 1.10.3 자동으로 클래스 검색 및 Bean 정의 등록
        • 1.10.4 스캐닝을 커스터마이징 하기위해 필터를 사용
        • 1.10.5 component 내에 Bean 메타 데이터 정의
        • 1.10.6 이름으로 자동탐지되는 컴포넌트
        • 1.10.7 범위로 자동 감지되는 컴포넌트
        • 1.10.8 annotation과 함께 한정된 메타데이터 제공
        • 1.10.9 후보 component의 index 생성
      • 1.11 JSR 330 표준 어노테이션 사용하기 by sh
      • 1.12 자바 기반의 컨테이너 구성 by sh, ks
        • 1.12.1 기본 개념: @Bean 및 @Configuration by sh
        • 1.12.2 AnnotationConfigApplicationContext를 사용한 스프링 컨테이너 인스턴스화 by sh
        • 1.12.3 @Bean 사용 by ks
        • 1.12.4 @Configuration 어노테이션 by ks
        • 1.12.5 자바 기반 Configuration구성 by ks
      • 1.13 환경 추상화 by ys
        • 1.13.1 빈 정의 프로파일
        • 1.13.2 PropertySource추출
        • 1.13.3 @PropertySource 사용
        • 1.13.4 Placeholder Resolution in Statements
      • 1.14 LoadTimeWeaver 등록 by ks
      • 1.15 ApplicationContext의 부가 수용가능성들 by ks, sh
        • 1.15.1 MesageSource를 사용한 국제화 by ks
        • 1.15.2 표준과 커스텀 이벤트 by ks
        • 1.15.3 로우 레벨 리소스에 대한 편리한 접근 by sh
        • 1.15.4 웹 어플리케이션에 대한 간편한 Application 인스턴스화 by sh
        • 1.15.5 스프링 ApplicationContext를 Java EE RAR 파일로 배포하가ㅣ by sh
        • 1.15.3 Low-level 리소스로 편리한 접근
        • 1.15.4 웹 어플리케이션을 위한 편리한 ApplicationContext 인스턴스화
      • 1.16 BeanFactory by sh
    • 2. Resource by ks
      • 2.1 소개
      • 2.2 Resource interface
      • 2.3 내장 리소스 확장
      • 2.4 ResourceReader
      • 2.5 ResourceLoaderAware 인터페이스
      • 2.6 Resources 의존성
      • 2.7 어플리케이션 컨텍스트와 리소스 경로
    • 3. 유효성 검사, 데이터 바인딩 및 유형 변환 by ys, sh
      • 3.1. Spring의 Validator 인터페이스를 사용하여 유효성 검사 by ys
      • 3.2. 오류 메시지로 코드 해결 by ys
      • 3.3. bean 조작과 BeanWrapper by ys
        • 3.3.1. 기본 및 중첩 된 프로퍼티를 설정 및 가져 오기
        • 3.3.2. 내장 된 PropertyEditor구현
      • 3.4 스프링 타입 변환 by sh
        • 3.4.1 Converter SPI
        • 3.4.2 ConverterFactory 사용하기
        • 3.4.3 GenericConverter 사용하기
        • 3.4.4 ConversionService API
        • 3.4.5 ConversionService 구성
        • 3.4.6 프로그래밍 방식으로 ConversionService 사용하기
      • 3.5 스프링 필드 포맷팅 by sh
        • 3.5.1 Formatter SPI
        • 3.5.2 Annotation 기반의 포맷팅
        • 3.5.3 FormatterRegistry SPI
        • 3.5.4 FormatterRegistrar SPI
        • 3.5.5 스프링 MVC에서 포맷팅 구성하기
      • 3.6 전역 Date and Time 포맷 구성 by sh
      • 3.7 스프링 유효성 검사 by sh
        • 3.7.1 by sh
        • 3.7.2 by sh
        • 3.7.3 by sh
    • 4 스프링 표현식 언어 (SpEL)
      • 4.1 평가 by sh
      • 4.2 빈 정의에 있는 표현식 by sh
      • 4.3 Language Reference
        • 4.3.1 리터럴 표현식 by ys
        • 4.3.2 프로퍼티,배열,목록,지도 및 인덱서 by ys
        • 4.3.3 인라인 목록 by ys
        • 4.3.4 인라인 Maps by ys
        • 4.3.5 배열 구성 by ys
        • 4.3.6 행동 양식 by ys
        • 4.3.7 연산자 by ys
        • 4.3.8 유형 by ys
        • 4.3.9 생성자 by ys
        • 4.3.10 변수 by ks
        • 4.3.11 함수 by ks
        • 4.3.12 빈 참조 by ks
        • 4.3.13 삼항 연산자 (If-Then-Else) by ks
        • 4.3.14 엘비스 연산자 by ks
        • 4.3.15 안전한 네비게이션 연산자 by ks
        • 4.3.16 컬렉션 셀렉션 by ks
        • 4.3.17 컬렉션 프로젝션 by ks
        • 4.3.18 표현 템플릿 by ks
    • 5 spring을 이용한 aspect 지향 프로그래밍
      • 5.1 AOP 개념 by ys
      • 5.2 Spring AOP 기능 및 목표 by ys
      • 5.3 AOP 프록시 by ys
      • 5.4 @AspectJ 지원 by ys,ks
        • 5.4.1 @AspectJ 지원 활성화 by ys
        • 5.4.2 Aspect 선언하기 by ys
        • 5.4.3 Pointcut 선언하기 by ys
        • 5.4.4 Advice 선언 by ks
        • 5.4.5 소개 by ks
        • 5.4.6 Aspect 초기화 모델 by ks
        • 5.4.7 AOP 예제 by ks
      • 5.5 스키마 기반 AOP 지원 by sh
        • 5.5.1 Aspect 선언 by sh
        • 5.5.2 Pointcut 선언 by sh
        • 5.5.3 Advice 선언 by sh
        • 5.5.4 인트로덕션 by sh
        • 5.5.5 Aspect 인스턴스화 모델 by sh
        • 5.5.6 Advisors by sh
        • 5.5.7 AOP 스키마 예제 by sh
    • 6 Spring AOP API
      • 6.1 Spring의 Pointcut API
        • 6.1.1 개념들 by ys
        • 6.1.2 Pointcuts에 대한 작업 by ys
        • 6.1.3 AspectJ Expression Pointcuts by ys
        • 6.1.4 편리한 Pointcut 구현 by ys
        • 6.1.5 포인트 컷 수퍼 클래스 by ys
        • 6.1.6. 사용자 정의 Pointcut by ys
      • 6.2 Spring의 Advice API
        • 6.2.1. 조언 라이프 사이클 by ys
        • 6.2.2 Spring의 advice 유형 by ys
      • 6.3 Spring의 Advisor API by ks
      • 6.4 ProxyFactoryBean을 사용해서 AOP 프록시 생성 by ks
        • 6.4.1 기본
        • 6.4.2 자바빈 프로퍼티
        • 6.4.3 JDK 및 CGLIB 기반 프록시
        • 6.4.4 프록시 인터페이스
        • 6.4 5 프록시 클래스
        • 6.4.6 "Global" advisor 사용
      • 6.5 간결한 프록시 정의 by sh
      • 6.6 ProxyFactory를 사용하여 프로그래밍 방식으로 AOP 프록시 만들기 by sh
      • 6.7 Advised 객체들 조작하기 by sh
      • 6.8 "자동 프록시" 기능 사용 by sh
      • 6.9 TargetSource구현체 사용하기 by sh
      • 6.10 새로운 Advice 타입 정의하기 by sh
    • 7. 데이터 버퍼와 코덱 by ks
Powered by GitBook
On this page

Was this helpful?

  1. spring 5.0
  2. 1. IoC 컨테이너

1.2 컨테이너 by ys

Previous1.1 스프링 IoC 컨테이너와 빈의 도입 by shNext1.3 빈 개요 by ks

Last updated 6 years ago

Was this helpful?

IoC(Inversion of Control- 제어의 역전)란?] : IoC란 프로그램의 제어 흐름 구조가 바뀌는 것

[AOP(Aspect-Oriented Programming)기술이란?] : 기능을 핵심 비즈니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법공통 모듈(보안 인증, 로깅 같은 요소등)을 만든 후에 코드 밖에서 이 모듈을 비느지스 로직에 삽입하는 이 바로 AOP적인 개발이다. 코드 밖에서 설정 된다는 것이 핵심이다. = 분산되어 있고 중복적인 내용을 묶어주는 기법 ex) 로깅, 보안, 간단한 메소드 성능 검사, 트랜잭션, 예외 반환, 아키텍처 검증 등의 공통기능을 모듈화 처리

org.springframework.context.ApplicationContext 인터페이스는 Spring IoC 컨테이너를 말하며, 인스턴스화, 구성 및 bean들의 결합을 담당합니다. 컨테이너는 구성 메타 데이터를 읽음으로써 어떤 객체를 인스턴스화, 구성 및 결합할 것인지에 대한 지시를 얻습니다. 구성 메타 데이터는 XML, Java 어노테이션 또는 Java 코드로 표시됩니다. 이를 통해 어플리케이션을 구성하는 오브젝트와 해그 오브젝트 간의 풍부한 상호 의존성을 표현할 수 있습니다.

객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance)이다. 객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가지지만, 소프트웨어 관점에서는 그저 콘셉에 불과하다. 소프트웨어에서 객체를 구현하기 위해서는 콘셉 이상으로 많은 것들을 사고하여 구현해야 하므로, 이를 위한 설계도로 클래스를 작성한다. 설계도를 바탕으로 객체를 소프트웨어에 실체화 하면 그것이 인스턴스(Instance)가 되고, 이 과정을 인스턴스화(instantiation)라고 한다. 실체화된 인스턴스는 메모리에 할당된다.

코딩을 할 때, 클래스 생성에 따라 메모리에 할당된 객체인 인스턴스를 ‘객체’라고 부르는데, 틀린 말이 아니다.

인스턴스라고 부르면 더 정확하지만, 개념적으로 인스턴스는 객체에 포함된다고 볼 수 있다. 물론 어디가 소프트웨어 세계에 더 가깝냐를 따지면 당연히 인스턴스이다. 잘 구분해서 쓴다면 프로빼쌰날(?) 하다는 소리를 들을 수 있을지도. 그러나 객체나 인스턴스를 클래스로, 혹은 클래스를 객체나 인스턴스라고 해선 안 된다. 건물의 설계도를 보고 건물이라고 하지 않고, 반대로 건물을 설계도라고 하지 않으니까~

ApplicationContext인터페이스 의 몇가지 구현은 Spring과 함께 제공됩니다. 독립 실행 형 응용 프로그램에서 이것은 또는 의 인스턴스를 만드는 것이 일반적입니다. XML은 구성 메타 데이터를 정의하기위한 전통적인 형식이었던 반면에 자바 annotation을 사용하거나 선언적으로 추가적인 메타데이터 형식이 지원이 가능하기위해 작은 양의 XML 구성을 제공함으로써 메타데이터 형식을 코드화 하는것에 사용할 수 있습니다.

대부분의 애플리케이션 시나리오에서 명백한 너(사용자)의 코드는 Spring IoC 컨테이너의 하나 이상의 인스턴스를 인스턴스화 할 필요가 없다. 예를 들어, 웹 응용 프로그램 시나리오에서 웹의 web.xml 파일 안에 있는 상용구 웹 설명자 XML의 간단한 8줄만 있으면 전형적으로 충분합니다.( 참조 ). Suite(이클립스 구동 개발 환경)를 사용하는 경우, 당신은 쉽게 몇 번의 마우스 클릭이나 키 입력이 이 상용구 구성을 만들 수 있습니다.

다음 다이어그램은 Spring이 어떻게 작동 하는지 높은 레벨의 를 보여줍니다. 응용 프로그램 클래스는 구성 메타 데이터와 결합되어 ApplicationContext작성되고 초기화 된 후 완전히 구성되고 실행 가능한 시스템 또는 응용 프로그램을 갖게됩니다.

​

​

1.2.1 configuration 메타 데이터

Spring configuration metadata스프링 설정 메타데이터

  • 어떤 객체를 인스턴스화·설정·구성할 것인지에 대한 정보

XML, 자바 애노테이션, 자바 코드로 표현됨

1.2.1. configuration 메타 데이터

앞의 다이어그램에서 볼 수 있듯이 Spring IoC 컨테이너는 configuration 메타 데이터의 형태를 사용한다. 이 configuration 메타 데이터는 애플리케이션 개발자로서 애플리케이션에서 어떻게 객체를 인스턴스화, 구성 및 조립을 위해 어떻게 Spring 컨테이너를 말할 수 있는지 나타냅니다.

configuration 메타 데이터는 전통적으로 단순하고 직관적 인 XML 형식으로 제공되며, 이 장의 대부분은 Spring IoC 컨테이너의 핵심 개념과 기능을 전달하는 데 사용된다.

​

Spring 컨테이너에서 다른 형식의 메타 데이터를 사용하는 방법에 대한 정보는 다음을 참조하십시오.

Spring configuration은 컨테이너가 관리해야하는 최소 하나 이상의 bean 정의로 구성된다. XML 기반 configuration 메타 데이터는 이러한 bean을 <bean/>최상위 요소 내부의 <beans/>요소로 구성합니다. Java configuration은 일반적으로 @Configuration 클래스 안의 annotation 방법인 @Bean 을 사용합니다.

이 bean 정의는 응용 프로그램에서 만들어진 실제 객체에 해당합니다. 일반적으로 서비스 계층 개체, 데이터 접근 개체 (DAO), Struts Action인스턴스 와 같은 프레젠테이션 개체 , Hibernate SessionFactories, JMS Queues등과 같은 인프라 개체 등을 정의합니다.

--> 너무 어렵다..

1. 하이버네이트(Hibernate) 란? 하이버네이트는 ORM(Object-Relational Mapping) 의 한 종류 이다. ORM은 데이터베이스에 저장된 데이터와 프로그램의 객체를 매핑하는 프로그램 기술이다.또한, 간단하게 데이터를 생성하고, 조작하고, 접근 할 수 있게 해준다. 2. 하이버네이트를 쓰면 좋은점 1. 오픈소스이며 가볍다.2. 빠른 성능을 보장한다. 2단계 캐시를 지원한다.3. 데이터베이스 쿼리에 독립적이다. (Oracle이나 MySQL 등 상이한 데이터베이스에 대해 같은 결과를 보장받는다.)4. 자동으로 테이블 생성 기능을 제공한다.5. 간단한 조인을 수행한다. 6. 쿼리 캐시와 데이터베이스 상태와 쿼리의 통계에 대한 기능을 지원한다.

하이버네이트의 구성 요소 중 SessionFactory

Session 과 application 의 Connection Provider 에 대한 Factory 이다. 그것은 (Session 또는 Connection Provider 를 말하는 것 같다.) 2단계 캐시를 유지한다. org.hibernate.SessionFactory 인터페이스는 Session 객체를 반환 하는 메소드를 제공한 다.

하이버네이트 더 찾아볼 것.

​

목적 : 서로의 부분을 디자이너의 영역과 프로그래머의 영역 전체적인 설정과 구조를 서로 분리해보자.

이도 심플하게 말하자면 영역을 분리하는것입니다.

디자이너의 부분 프로그램의 부분 전체적인 시스템을 관리하는 부분(컨트롤이라고도 하죠.)

이를 어려운 영어를 쓴다면 MVC가 됩니다. Model, View, Controller라는 이름으로 구분하게 된것이죠.

이렇게 사용하게끔 구분을 하여 나온것이 struts라는 프레임워크인 것입니다.

이것만 기억하세요 struts는 MVC를 근간으로 하는 프레임워크다

역자주: 코(장음)스 그레인드(coarse-grained)와 파인 그레인드(fine-grained)는 우리말 한마디로 옮기기에는 무척 버거운 개념이다. grain은 원래 보리나 밀 같은 곡식을 낟알로 만드는 작업이나 표면을 우둘투둘하게 하는 일을 뜻 하는데, 그때아주 곱고 섬세하게 하느냐, 아니면 듬성 듬성 크게 하느냐에 따라 fine와 coarse라 는형용사를 붙인다. 이것이 소프트웨어공학에 도입되어 어떠한 프로세스를 아주 잘게 쪼개느냐 아니면 굵게 쪼개서 뭉뚱그려 놓느냐를 표현할 때 쓰게 되었다. 웹서비스에서의서비스라는 단위에 비해 상대적으로 자바의 메소드는 더 세분화되어있다는 뜻에서 코스그레인드 서비스-파인그레인드 메소드라는 대칭이 생겼다고 봐도 좋다.

: coase-grainde : 크게 쪼개는거, fine-grained : 세밀하게 쪼개는거

​

다음 예제는 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="..." class="...">          
    <!-- collaborators and configuration for this bean go here -->  
      </bean>​    <bean id="..." class="...">       
   <!-- collaborators and configuration for this bean go here -->    </bean>​    
   <!-- more bean definitions go here -->​</beans>
  1. id 속성은 개별 빈 정의를 식별하는 문자열 입니다.

  2. 이 class 속성은 bean의 유형을 정의하고 완전한 클래스 이름을 사용합니다.

1.2.2. 컨테이너 인스턴스화하기

ApplicationContext생성자에 제공되는 위치 경로 는 컨테이너가 로컬 파일 시스템, Java CLASSPATH등과 같은 다양한 외부 리소스의 구성 메타 데이터를로드 할 수 있도록하는 리소스 문자열입니다.

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

다음 예에서는 서비스 계층 개체 (services.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">​    
 <!-- services -->​   
 
   <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">        
   <property name="accountDao" ref="accountDao"/>       
<property name="itemDao" ref="itemDao"/>        
<!-- additional collaborators and configuration for this bean go here -->   
 </bean>​    <!-- more bean definitions for services go here -->​</beans>

다음 예제에서는 데이터 액세스 개체 daos.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="accountDao"       
  class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">      
    <!-- additional collaborators and configuration for this bean go here --> 
</bean>​    

<bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">        
<!-- additional collaborators and configuration for this bean go here -->   
 </bean>​    <!-- more bean definitions for data access objects go here -->
 ​</beans>

XML 기반 구성 메타 데이터 작성

빈 정의가 여러 XML 파일에 걸쳐있는 것이 유용 할 수 있습니다. 각 개별 XML 구성 파일은 아키텍처의 논리 계층 또는 모듈을 나타내는 경우가 많습니다.

<beans>   
 <import resource="services.xml"/>    
 <import resource="resources/messageSource.xml"/>    
 <import resource="/resources/themeSource.xml"/>​    
  <bean id="bean1" class="..."/>    
  <bean id="bean2" class="..."/>
 </beans>

앞의 예에서 외부 bean 정의는 세 개의 파일에서로드 : services.xml, messageSource.xml,와 themeSource.xml. 모든 위치 경로는 가져 오기를 수행하는 정의 파일에 상대적이기 때문에 services.xml동안, 오기 (import)를 수행하는 파일과 같은 디렉토리 나 클래스 패스 위치에 있어야messageSource.xml하고 themeSource.xml에 있어야합니다 resources가져 오기 파일의 위치 아래에 위치. 보시다시피, 선행 슬래시는 무시됩니다. 그러나 이러한 경로가 상대적인 경우 슬래시를 전혀 사용하지 않는 것이 좋습니다. 최상위 <beans/>요소를 포함하여 가져올 파일의 내용은 Spring 스키마에 따라 유효한 XML bean 정의 여야합니다.

​

상대적 "../"경로를 사용하여 상위 디렉토리의 파일을 참조하는 것은 가능하지만 권장하지는 않습니다. 이렇게하면 현재 응용 프로그램 외부에있는 파일에 대한 종속성이 만들어집니다. 특히이 참조는 런타임 해결 프로세스가 "가장 가까운"클래스 경로 루트를 선택한 다음 상위 디렉토리를 조사 하는 classpath:URL (예 :) 에는 권장되지 않습니다 classpath:../services.xml. 클래스 경로 구성 변경으로 인해 다른 디렉토리가 잘못 선택 될 수 있습니다.

상대 경로 대신 정규화 된 리소스 위치를 항상 사용할 수 있습니다 (예 : file:C:/config/services.xml또는) classpath:/config/services.xml. 그러나 응용 프로그램의 구성을 특정 절대 위치에 연결한다는 점에 유의하십시오. 일반적으로 런타임시 JVM 시스템 속성에 대해 해결되는 "$ {...}"자리 표시자를 통해 절대 위치에 대한 간접 참조를 유지하는 것이 바람직합니다.

네임 스페이스 자체가 가져 오기 지시문 기능을 제공합니다. 일반 Bean 정의를 뛰어 넘는 추가 구성 기능은 Spring에서 제공하는 XML 네임 스페이스 (예 : the context및 util네임 스페이스) 의 선택에서 사용할 수 있습니다 .

그루비 빈 정의 DSL

외부화 된 설정 메타 데이터에 대한 또 다른 예로서, 빈 정의는 Grails 프레임 워크에서 알려진 바와 같이 Spring의 Groovy Bean Definition DSL로 표현 될 수있다. 일반적으로 이러한 구성은 다음 예제와 같은 구조의 ".groovy"파일에 있습니다.

beans {    dataSource(BasicDataSource) 
{        driverClassName = "org.hsqldb.jdbcDriver"       
 url = "jdbc:hsqldb:mem:grailsDB"       
username = "sa"       
 password = ""        
 settings = [mynew:"setting"]    }   
  sessionFactory(SessionFactory) 
  {        dataSource = dataSource    }    
  myService(MyService) {       
   nestedBean = { AnotherBean bean ->          
     dataSource = dataSource        }    }}

이 설정 스타일은 XML bean 정의와 거의 동일하며 Spring의 XML 설정 네임 스페이스를 지원한다. 또한 XML Bean 정의 파일을 importBeans지시문을 통해 가져올 수 있습니다 .

1.2.3. 컨테이너 사용

이것은 ApplicationContext다른 bean과 그 의존성의 레지스트리를 관리 할 수있는 고급 팩토리를위한 인터페이스입니다. 이 메소드를 사용 T getBean(String name, Class<T> requiredType)하여 bean 인스턴스를 검색 할 수 있습니다.

ApplicationContext은 당신이 이 빈 정의를 읽고, 다음의 예와 같이, 그들에 액세스 할 수 있습니다 :

// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
​// retrieve configured instancePetStoreService service = context.getBean("petStore", PetStoreService.class);
​// use configured instanceList
<String> userList = service.getUsernameList();

Groovy 설정을 사용하면 부트 스트랩이 매우 비슷해 보입니다. 이것은 Groovy를 인식하는 다른 컨텍스트 구현 클래스를 가지고 있지만 (또한 XML bean 정의를 이해한다.) 다음 예제는 Groovy 설정을 보여줍니다 :

ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");

가장 유연한 변형은 다음 예제와 같이 XML 파일의 경우와 같이 GenericApplicationContext독자 위임자와 함께 사용 XmlBeanDefinitionReader됩니다.

GenericApplicationContext context = new GenericApplicationContext();
new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");context.refresh();

GroovyBeanDefinitionReader다음 예제와 같이 for Groovy 파일을 사용할 수도 있습니다

GenericApplicationContext context = new GenericApplicationContext();
new GroovyBeanDefinitionReader(context).loadBeanDefinitions("services.groovy", "daos.groovy");context.refresh();

이러한 리더 위임자 ApplicationContext를 다양한 구성 소스의 Bean 정의를 읽고 동일한 환경 에서 혼합하여 사용할 수 있습니다 .

XML 기반 메타 데이터는 configuration 메타 데이터의 유일한 허용 형식이 아닙니다. Spring IoC 컨테이너 자체는이 구성 메타 데이터가 실제로 작성된 형식과 완전히 분리되어있다. 요즈음, 많은 개발자 들은 Spring 어플리케이션을위한 configuration 을 선택 합니다.

​ : 스프링 2.5는 어노테이션 기반 설정 메타 데이터에 대한 지원을 도입했다.

​ : Spring 3.0부터는 Spring JavaConfig 프로젝트에서 제공하는 많은 기능들이 핵심 Spring 프레임 워크의 일부가되었다. 따라서 XML 파일이 아닌 Java를 사용하여 응용 프로그램 클래스 외부의 Bean을 정의 할 수 있습니다. 이러한 새 기능을 사용하려면 , , , 및 annotion을 참조하세요.

Message Queue는 JMS(Java Message Service) 개방형 표준을 구현하는 엔터프라이즈 메시징 시스템 즉, 입니다.

​

일반적으로 도메인 객체를 생성하고로드하는 것은 DAO와 비즈니스 로직의 책임이기 때문에 일반적으로 컨테이너에 세밀한 도메인 객체를 구성하지 않습니다. 그러나 AspectJ와 Spring의 통합을 사용하여 IoC 컨테이너의 제어 범위 밖에서 생성 된 객체를 구성 할 수있다. 참조하십시오 .

id속성 의 값은 협업 오브젝트를 나타냄니다. 협업 오브젝트를 참조하기위한 XML은 이 예제에 표시되지 않습니다. 자세한 내용은 을 참조하십시오.

Spring의 IoC 컨테이너에 대해 배우고 나면 , URI 구문에 정의 된 위치에서 InputStream을 읽는 편리한 메커니즘을 제공하는 Spring의 Resource추상화 에 대해 자세히 알고 싶을 것이다 ( ). 특히 Resource경로는 에서 설명한대로 응용 프로그램 컨텍스트를 구성하는 데 사용됩니다 .

앞의 예에서 서비스 계층은 PetStoreServiceImpl유형 JpaAccountDao및 JpaItemDao(JPA 객체 관계형 매핑 표준을 기반으로 한) 두 가지 데이터 액세스 객체 로 구성됩니다 . property name요소는 자바 빈즈 속성의 이름을 참조하고, ref요소는 다른 빈 정의의 이름을 나타냅니다. 이 요소 id와 ref요소 사이의 연결은 공동 작업 객체 간의 종속성을 나타냅니다. 개체의 종속성을 구성하는 세부 사항을 참조 .

응용 프로그램 컨텍스트 생성자를 사용하여 모든 XML 조각에서 bean 정의를 로드 할 수 있습니다. 이 생성자는 Resource 에서 것처럼 여러 위치를 사용합니다 . 또는 <import/>요소 의 하나 이상의 어커런스를 사용하여 다른 파일 또는 파일의 bean 정의를로드하십시오. 다음 예제에서는 이를 수행하는 방법을 보여줍니다.

그런 다음 getBeanbean의 인스턴스를 검색 하는 데 사용할 수 있습니다 . ApplicationContext 인터페이스는 이상적으로, 응용 프로그램 코드를 사용해서는 안, bean을 검색하기위한 몇 가지 다른 방법이 있지만. 사실, 애플리케이션 코드는 getBean()메소드에 대한 호출을 전혀 가지지 않아야 하므로 Spring API에 전혀 의존하지 않는다. 예를 들어 Spring의 웹 프레임 워크와의 통합은 컨트롤러 및 JSF 관리 빈과 같은 다양한 웹 프레임 워크 구성 요소에 대한 종속성 주입을 제공하여 메타 데이터 (예 : 자동 와이어 링 주석)를 통해 특정 빈에 대한 종속성을 선언 할 수 있습니다.

어노테이션 기반 configuraton
자바 기반 configuration
@Configuration
@Bean
@Import
@DependsOn
JMS 공급자
Struts(스트럿츠) : 자바 프레임워크를 이용한 웹 애플리케이션의 구축
AspectJ를 사용하여 Spring과의 의존성 주입 도메인 객체를
종속성
종속성
이전 섹션
설명한
자바 기반
참고 자료 참조
응용 프로그램 컨텍스트 및 자원 경로
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
웹 응용 프로그램의 편리한 ApplicationContext Instantiation
Spring Tool