복붙노트

[SPRING] Spring의 @Configurable이 때때로 작동하고 때로는 그렇지 않은 이유는 무엇입니까?

SPRING

Spring의 @Configurable이 때때로 작동하고 때로는 그렇지 않은 이유는 무엇입니까?

주입을 필요로하는 필드에 Spring의 @Configurable annotation w / @Resource를 통해 자동 종속성 주입을 사용하려고합니다. 이것은 JVM에 spring-agent.jar를 전달하는 것과 같은 몇 가지 설정과 관련이 있습니다. 전체 내용은 여기를 참조하십시오.

그것은 주로 ... 작동합니다. Tomcat이 부팅 될 때 AspectJ 초기화 메시지가 표시되고 User 객체는 FileService 참조를 자동으로 가져온다.

문제는 때로는 발생하지 않는다는 것입니다. 완전히 무작위로 보인다. 때로는 부팅되고 종속성은 주입되지 않습니다. 이전에 충돌이 발생하여 @Transactional이 내 사용자에게 문제가 발생했습니다. 프록시로 믿습니다. 나는 JPA를 사용하고있어서, 나의 사용자는 @Entity로 표시되어있다. 그래서 가장 좋은 추측은 이것이 충돌을 일으킨다는 것이다. 나는 당신이 자동 프록시 프록시를 읽을 수 없다는 것을 읽었습니다. 충돌을 상쇄하기 위해, 나는 CGLIB와 Jibernate (내 JPA impl)가 사용하는 javassist를 제외하고 온라인에서 찾은 몇 가지 노트를 따랐다.

단서 :

무엇이 잘못되었는지 알아 내려면 어떻게해야합니까? @Configurable을 JPA와 함께 사용하는 사람이 있습니까? 종속성을 실제로 주입하지 않으면 내 dependencyCheck가 true가 아닌 이유는 무엇입니까?

실재

@Entity
@Configurable(dependencyCheck = true)
@NamedQueries( { @NamedQuery(name = "User.findAll", query = "SELECT user FROM User user"),
    @NamedQuery(name = "User.findByEmail", query = "SELECT user FROM User user WHERE user.email = :email") })
public abstract class User extends BaseModel {

private static final long serialVersionUID = 7881431079061750040L;

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;

@Column(unique = true, nullable = false)
private String email;

@Basic(optional = false)
private String password;

@Resource
private transient UserEmailer userEmailer;

@Resource
private transient FileService fileService;

...

aop.xml

<!DOCTYPE aspectj PUBLIC
    "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
    <weaver options="-verbose">
        <include within="com.myapp.domain..*" />
        <exclude within="*..*CGLIB*" />
        <exclude within="*..*javassist*" />
    </weaver>
    <aspects>
        <aspect name="org.springframework.beans.factory.aspectj.AbstractInterfaceDrivenDependencyInjectionAspect" />
    </aspects>
</aspectj>

applicationContext.xml

...

<context:spring-configured />

<context:load-time-weaver />

<context:component-scan base-package="com.myapp" />

...

해결법

  1. ==============================

    1.먼저, 자원, 서비스 또는 기타 bean을 데이터 모델 클래스에 종속 항목으로 주입하는 것은 좋지 않을 것이라고 말합니다. 그러나 그것은 디자인의 문제입니다.

    먼저, 자원, 서비스 또는 기타 bean을 데이터 모델 클래스에 종속 항목으로 주입하는 것은 좋지 않을 것이라고 말합니다. 그러나 그것은 디자인의 문제입니다.

    @Configurable을 사용하기 위해 웹 애플리케이션, 필터 또는 서블릿의 커스텀 태그와 같은 Spring 컨텍스트 외부에서 객체가 인스턴스화되는 경우에 사용했습니다. 내가 그들을 사용하려고 시도하는 첫 번째 방법은로드 타임을 짜는 것입니다. 그것은 꽤 잘 작동했지만 디버깅이 더 이상 작동하지 않는 동안 핫 코드 배포와 같은 몇 가지 단점이있었습니다.

    나는 또한 당신이 묘사하는 문제를 정확히 경험했기 때문에,로드 시간 짜기에서 컴파일 시간으로 전환하기로 결정했습니다. 따라서 Eclipse에 AJDT 플러그인을 설치하고 Spring의 aspecjt 지원을 사용했습니다. 그게 내 문제를 해결해 줬어.

  2. ==============================

    2.나에게 이것은 봄에 잘 알려진 버그가있는 것처럼 들린다. http://jira.springframework.org/browse/SPR-5401.

    나에게 이것은 봄에 잘 알려진 버그가있는 것처럼 들린다. http://jira.springframework.org/browse/SPR-5401.

    여러 응용 프로그램 컨텍스트에서 Configurable을 사용하려고 할 수 있습니까? 이 경우에는 하나만 종속성 주입의 대상이됩니다. 어떤 애플리케이션이로드되는지는 애플리케이션 컨텍스트가 마지막으로로드되는 시점에 달려 있습니다.

    해결책? 없음 :-(이 문제를 해결할 계획은 없으며 적어도 SpringSource 사가 4 월에 독일에서 열린 JAX 컨퍼런스에서 말한 내용입니다.

  3. ==============================

    3.명백한 점을 발견 할 수 없으므로, 제안 사항 - 컴파일 타임 짜기를 사용해 보았습니까? 개발 중에는 좀 더 번거로운 일이있을 수 있지만 런타임에서 일관된 결과를 가져다 주길 바랍니다.

    명백한 점을 발견 할 수 없으므로, 제안 사항 - 컴파일 타임 짜기를 사용해 보았습니까? 개발 중에는 좀 더 번거로운 일이있을 수 있지만 런타임에서 일관된 결과를 가져다 주길 바랍니다.

  4. ==============================

    4.어떤 이유로 든 주사가 ​​작동하지 않으면 코드가 종속성 검사를 수행 할 방법이 없으므로 이제 오류가 발생합니다.

    어떤 이유로 든 주사가 ​​작동하지 않으면 코드가 종속성 검사를 수행 할 방법이 없으므로 이제 오류가 발생합니다.

    그렇지 않으면 무작위로 실패한 것을 여기에서 볼 수 없습니다. 확인할 간단한 예제를 추출 할 수 있습니까?

  5. ==============================

    5.배포 프로세스가 의심스러운 것 같습니다. 작동하는 배포를 수행 한 다음이를 디렉토리로 복사 할 수 있습니까? 그런 다음 작동하지 않는 것을 얻을 때까지 다른 배포를 수행하십시오. (어느 쪽이든 순서대로) 그런 다음 마지막으로 비교할만한 도구를 사용하여 두 배포 디렉토리 구조와 파일을 비교하고 차이점이 있는지 확인하십시오.

    배포 프로세스가 의심스러운 것 같습니다. 작동하는 배포를 수행 한 다음이를 디렉토리로 복사 할 수 있습니까? 그런 다음 작동하지 않는 것을 얻을 때까지 다른 배포를 수행하십시오. (어느 쪽이든 순서대로) 그런 다음 마지막으로 비교할만한 도구를 사용하여 두 배포 디렉토리 구조와 파일을 비교하고 차이점이 있는지 확인하십시오.

    행운을 빈다. 생산성을 떨어 뜨리기 위해 겉으로보기에는 무작위적인 문제는 아무 것도 없다.

  6. from https://stackoverflow.com/questions/828747/why-does-springs-configurable-sometimes-work-and-sometimes-not by cc-by-sa and MIT license