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
  • 6.9. TargetSource구현체 사용하기
  • 6.9.1. Hot-swappable Target Sources
  • 6.9.2. Pooling Target Sources
  • 6.9.3. Prototype Target Sources
  • 6.9.4. ThreadLocal Target Sources

Was this helpful?

  1. spring 5.0
  2. 6 Spring AOP API

6.9 TargetSource구현체 사용하기 by sh

6.9. TargetSource구현체 사용하기

Spring은 org.springframework.aop.TargetSource인터페이스에 표현 된 TargetSource의 개념을 제공합니다. 이 인터페이스는 조인 포인트를 구현하는 "대상 객체"를 반환합니다. TargetSource구현은 AOP 프록시가 메소드 호출을 처리 할 때마다 대상 인스턴스를 요청받습니다.

Spring AOP를 사용하는 개발자는 일반적으로 TargetSource구현체로 직접 작업 할 필요가 없지만 풀링, 핫 스왑 및 기타 정교한 타겟을 지원하는 강력한 수단을 제공합니다. 예를 들어 Pooling TargetSource는 인스턴스를 관리하기 위해 풀을 사용하여 각 호출에 대해 다른 대상 인스턴스를 반환 할 수 있습니다.

TargetSource를 지정하지 않으면 기본 구현을 사용하여 로컬 객체를 래핑합니다. 각 호출에 대해 동일한 대상이 반환됩니다 (예상대로).

이 절의 나머지 부분에서는 Spring에서 제공되는 표준 대상 소스와 그 사용 방법에 대해 설명합니다.

스프링 AOP의 TargetSource 개념 : AOP의 동작 과정에서 대상 객체를 가져오는 부분에 들어가는 조인포인트. (AOP를 적용한 최종 객체를 가져오는 과정에 개입한다는 의미)

-> TargetSource의 활용 : Hot Swappable TargetSource, Pooling TargetSource
    -> Pooling TargetSource 전략 3가지 : 
        1. 매번 새 대상 객체를 돌려주는 prototypeTargetSource
        2. 같은 쓰레드에서는 같은 객체를 반복적으로 돌려주는 ThreadLocalTargetSource
        3. commons.pool을 이용한 객체 풀링을 지원하는 CommonsPoolTargetSource 

사용자 정의 대상 소스를 사용할 때 대상은 일반적으로 단일 bean 정의가 아닌 프로토 타입이어야합니다. 이렇게하면 Spring이 필요할 때 새로운 타겟 인스턴스를 생성 할 수있습니다.

6.9.1. Hot-swappable Target Sources

org.springframework.aop.target.HotSwappableTargetSource는 호출자가 AOP 프록시의 대상에 대한 참조를 유지하는 동안 AOP 프록시 대상을 교체 할 수 있도록하기 위해 존재합니다.

argetSource의 대상 변경은 즉시 적용됩니다. HotSwappableTargetSource는 스레드로부터 안전합니다.

즉, 런 타임에 대상을 바꾸고 변경하려는 빈의 프록시를 사용하는 것. AOP 지원 클래스.

(HotSwappableTargetSource를 사용하면 쉽게 할 수 있음)

다음 예제와 같이 HotSwappableTargetSource에서 swap() 메서드를 사용하여 대상을 변경할 수 있습니다.

HotSwappableTargetSource swapper = (HotSwappableTargetSource) beanFactory.getBean("swapper");
Object oldTarget = swapper.swap(newTarget);

다음 예제에서는 필수 XML 정의를 보여줍니다.

<bean id="initialTarget" class="mycompany.OldTarget"/>

<bean id="swapper" class="org.springframework.aop.target.HotSwappableTargetSource">
    <constructor-arg ref="initialTarget"/>
</bean>

<bean id="swappable" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="targetSource" ref="swapper"/>
</bean>

앞의 swap() 호출은 스왑 가능한 빈의 대상을 변경합니다. 해당 bean에 대한 참조를 보유한 클라이언트는 변경을 인식하지 않지만 즉시 새 대상을 시작합니다.

이 예는 어떤 advice도 추가하지 않았지만 (TargetSource를 사용하기 위해 advice를 추가 할 필요는 없습니다) 임의의 advice와 결합해서 모든 TargetSource를 사용할 수 있습니다.

6.9.2. Pooling Target Sources

TargetSource의 풀링을 사용하면, 상태가 없는 세션 EJB와 유사한 프로그래밍 모델을 제공합니다. 이 프로그래밍 모델은 동일한 인스턴스 풀을 유지하고 메서드 호출로 풀에서 객체를 가져옵니다.

스프링 풀링과 SLSB 풀링의 중요한 차이점은 스프링 풀링은 모든 POJO에 적용 할 수 있다는 것입니다. 일반적으로 Spring과 마찬가지로,이 서비스는 비 침습적 인 방식으로 적용될 수 있습니다.

스프링은 상당히 효율적인 풀링 구현을 제공하는 Commons Pool 2.2를 지원합니다. 이 기능을 사용하려면 응용 프로그램의 classpath에 commons-poolJar가 필요합니다. 다른 풀링 API를 지원하기 위해 org.springframework.aop.target.AbstractPoolingTargetSource의 서브 클래스 화를 수행 할 수도 있습니다.

Commons Pool 1.5+도 지원되지만 Spring Framework 4.2에서는 더 이상 사용되지 않습니다.

다음 목록은 구성 예제를 보여줍니다.

<bean id="businessObjectTarget" class="com.mycompany.MyBusinessObject"
        scope="prototype">
    ... properties omitted
</bean>

<bean id="poolTargetSource" class="org.springframework.aop.target.CommonsPool2TargetSource">
    <property name="targetBeanName" value="businessObjectTarget"/>
    <property name="maxSize" value="25"/>
</bean>

<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="targetSource" ref="poolTargetSource"/>
    <property name="interceptorNames" value="myInterceptor"/>
</bean>

이 경우 myInterceptor는 동일한 IoC 컨텍스트에서 정의해야하는 인터셉터의 이름입니다. 그러나 풀링을 사용하려면 인터셉터를 지정할 필요는 없습니다. 풀링 만하고 다른 advice는 필요하지 않으면 interceptorNames속성을 전혀 설정하지 마십시오.

풀링 된 객체를 org.springframework.aop.target.PoolingConfig 인터페이스로 형변환 할 수 있도록 Spring을 설정할 수 있습니다. 이 인터페이스는 인트로덕션을 통해 풀의 구성 및 현재 크기에 대한 정보가 노출됩니다. 다음과 유사한 advisor를 정의해야합니다.

<bean id="poolConfigAdvisor" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="poolTargetSource"/>
    <property name="targetMethod" value="getPoolingConfigMixin"/>
</bean>

이 advisor는 AbstractPoolingTargetSource클래스에서 편리한 메소드를 호출하여 얻어 지므로 MethodInvokingFactoryBean을 사용합니다. 이 advisor의 이름 (poolConfigAdvisor)은 풀링 된 오브젝트를 공개하는 ProxyFactoryBean의 인터셉터 이름 목록에 있어야합니다.

캐스트는 다음과 같이 정의됩니다.

PoolingConfig conf = (PoolingConfig) beanFactory.getBean("businessObject");
System.out.println("Max pool size is " + conf.getMaxSize());

일반적으로 상태 비 저장 서비스 객체를 풀링하는 것은 필요하지 않습니다. 대부분의 상태 비 저장 객체는 자연스럽게 스레드 안전성을 가지기 때문에 기본적인 선택이어야 한다고 생각하지 않고, 리소스가 캐싱되는 경우 인스턴스 풀링이 문제가될 수 있습니다.

자동 프록시를 사용하면보다 간단한 풀링을 사용할 수 있습니다. 자동 프록시 작성자가 사용하는 TargetSource구현을 설정할 수 있습니다.

6.9.3. Prototype Target Sources

"프로토 타입" TargetSource 설정은 풀링 TargetSource설정과 유사합니다. 이 경우 모든 메소드 호출시 목표의 새 인스턴스가 작성됩니다. 현대의 JVM에서는 새로운 객체를 만드는 데 드는 비용이 높지 않지만 새로운 객체를 연결하는 비용 (IoC 의존성 충족)은 더 비쌉니다. 따라서 아주 좋은 이유없이 이 접근법을 사용하지 않아야합니다..

이렇게 하려면 앞에서 설명한 poolTargetSource정의를 다음과 같이 수정할 수 있습니다 (명확하게하기 위해 이름을 변경했습니다).

<bean id="prototypeTargetSource" class="org.springframework.aop.target.PrototypeTargetSource">
    <property name="targetBeanName" ref="businessObjectTarget"/>
</bean>

유일한 특성은 대상 bean의 이름입니다. (대상 빈의 이름을 위한 하나의 프로퍼티만 존재) 상속은 일관된 명명을 보장하기 위해 TargetSource구현에서 사용됩니다. 풀링 대상 소스와 마찬가지로 대상 bean은 프로토 타입 bean 정의 여야합니다.

6.9.4. ThreadLocal Target Sources

ThreadLocalTargetSource는 들어오는 각 요청 (스레드 당)에 대해 객체를 만들어야하는 경우에 유용합니다. ThreadLocal의 개념은 스레드와 나란히 리소스를 투명하게 저장하는 JDK 전역 기능을 제공합니다. ThreadLocalTargetSource를 설정하는 것은 다음 예제와 같이 다른 유형의 대상 소스에 대해 설명 된 것과 거의 같습니다.

<bean id="threadlocalTargetSource" class="org.springframework.aop.target.ThreadLocalTargetSource">
    <property name="targetBeanName" value="businessObjectTarget"/>
</bean>

ThreadLocal 인스턴스는 다중 스레드 및 다중 클래스 로더 환경에서 잘못 사용하면 심각한 문제 (메모리 누수가 발생할 수 있음)가 발생합니다. 다른 클래스에서는 threadlocal을 래핑하는 것을 항상 고려해야하며 ThreadLocal 자체를 직접 사용하지 않아야합니다 (래퍼 클래스 제외). 또한 스레드의 로컬 리소스를 올바르게 설정하고 해제하는 것을 잊지 말아야합니다 (후자는 간단히 ThreadLocal.set (null)에 대한 호출과 관련됩니다). 설정을 해제하지 않으면 문제가 발생할 수 있으므로 설정 해제는 어떤 경우에도 수행해야합니다. Spring의 ThreadLocal 지원은 당신을 위해 이것을 수행하며, 다른 적절한 처리 코드없이 ThreadLocal 인스턴스를 사용하는 것을 항상 고려해야한다.

Previous6.8 "자동 프록시" 기능 사용 by shNext6.10 새로운 Advice 타입 정의하기 by sh

Last updated 6 years ago

Was this helpful?

앞의 예제에서 targetObject (프로토 타입)는 대상 객체 여야합니다. 이를 통해 PoolingTargetSource구현은 대상의 새 인스턴스를 만들어 필요에 따라 풀을 확장 할 수 있습니다. 과 그 속성에 대한 정보를 위해 사용하고자 하는 구체적인 서브 클래스를 보십시오. maxSize가 가장 기본적인 프로퍼티이고 항상 존재한다는 보장이 있습니다.

javadoc ofAbstractPoolingTargetSource