# 6.4.2 자바빈 프로퍼티



Spring에서 제공되는 대부분의 `FactoryBean`구현 과 마찬가지로 , **`ProxyFactoryBean`클래스 자체는 JavaBean**입니다. 속성은 다음과 같은 용도로 사용됩니다.

* 프록시 할 대상을 지정하십시오.
* CGLIB 사용 여부를 지정합니다 (나중에 설명하고 [JDK 및 CGLIB 기반 프록시 참조](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-pfb-proxy-types) ).

{% hint style="info" %}
AOP 프록시 매커니즘은 두 가지가 있는데, **하나는 JDK 동적 프록시 이고, 다른 하나가 CGLIB 프록시**야.&#x20;

참조 : [http://wonwoo.ml/index.php/post/1576](http://wonwoo.ml/index.php/post/1576)
{% endhint %}

몇개의 키 프로퍼티는 `org.springframework.aop.framework.ProxyConfig` (Spring의 모든 AOP 프록시 팩토리의 슈퍼 클래스 에서) 로부터 상속받습니다 . 이러한 주요 속성에는 다음이 포함됩니다.

* `proxyTargetClass`: 대상 클래스의 인터페이스가 아닌 대상 클래스가 프록시 될 경우 true. 이 속성 값을 **true로 설정하면 CGLIB 프록시가 만들어집니다** ( [JDK 및 CGLIB 기반 프록시 참조](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-pfb-proxy-types) ).
* `optimize`: 적극적인 **최적화가** CGLIB를 통해 생성 된 프록시에 적용되는지 여부를 제어합니다. 관련 AOP 프록시가 최적화를 처리하는 방법을 완전히 이해하지 않으면 이 설정을 사용하지 않아야합니다. 이것은 **현재 CGLIB 프록시에만 사용**됩니다. JDK 동적 프록시에서는 아무 효과가 없습니다.
* `frozen`: 프록시 구성이있는 경우 구성 `frozen`변경이 더 이상 허용되지 않습니다. 이는 약간의 최적화와 `Advised` 프록시 생성 후 발신자가 ( 인터페이스를 통해 ) **프록시를 조작 할 수 없도록**하려는 경우에 유용합니다 . 이 속성의 기본값은 `false`이므로 변경 사항 (예 : 추가 advice 추가)이 허용됩니다.
* `exposeProxy`: 현재 프록시가 `ThreadLocal`대상에 의해 액**세스 될 수 있도록 노출되어야하는지 여부**를 결정합니다 . 대상에서 프록시를 가져와 `exposeProxy`속성을 true로 설정 해야하는 경우 대상에서이 메서드를 `true`사용할 수 있습니다 `AopContext.currentProxy()`.

`ProxyFactoryBean`다음의 특정 속성을 포함한다.&#x20;

* `proxyInterfaces`: `String`인터페이스 이름 의 배열 . 이것이 제공되지 않으면 대상 클래스에 대한 CGLIB 프록시가 사용됩니다 (그러나 [JDK 및 CGLIB 기반 프록시 참조](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-pfb-proxy-types) ).
*   `interceptorNames`: 적용할 Advisor나 인터셉터, 다른 어드바이스 이름의 문자열 배열. 순서가 중요하므로 처음 나온 것이 먼저 적용된다. 즉, **리스트의 첫 인터셉터가 가장 먼저 호출을 가로챌 수 있다.** 이름들은 조상 팩토리의 빈 이름을 포함해서 현재 팩토리의 빈 이름들이다. 여기서 빈 참조가 없는데 그렇게 할 경우 어드바이스의 싱글톤 설정을 무시하는 ProxyFactoryBean가 되기 때문이다.

    인터셉터 이름 앞에 별표 ( `*`)를 붙일 수 있습니다 . 그러면 별표가 적용되기 전에 파트로 시작하는 이름을 가진 모든 advisor bean이 적용됩니다. ["글로벌"권고 자](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-global-advisors) 사용에서이 기능을 [사용](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-global-advisors) 하는 예를 찾을 수 있습니다 .
* 싱글 톤 (singleton) : `getObject()`메서드가 호출 되는 빈도에 관계없이 **팩터리가 단일 객체를 반환해야하는지 여부** . 몇 가지 `FactoryBean`구현이 그러한 방법을 제공합니다. 기본값은 `true`입니다. 상태 기반 조언을 사용하려면 (예 : 상태 기반 믹스) - prototype advice와 singleton 값을 false로 사용하십시오.
