2012-10-15 7 views
1

LoggingAspect 클래스에 속성을 주입하는 데 문제가 있습니다.Aspect 로깅 클래스에 속성을 주입하는 방법은 무엇입니까?

public interface IBoc { 
} 

public class BocImpl implements IBoc { 
} 

및 BOC의 봄 구성 : 이것은 BOC입니다

@Aspect 
public class LoggingAspect { 
    private IBoc theBo; 

    /** getter and setter **/ 
} 

: 이미징 내가 AspectJ를 클래스가 applicationContext.xml 파일에서

<beans ...> 
    <aop:aspectj-autoproxy/> 

    <bean id="theBoc" class="org.huahsin.BocImpl"/> 
</beans> 

을, 나는 AspectJ의를 구성 이러한 방식으로 :

<beans...> 
    <bean id="theLog" class="org.huahsin.LoggingAspect"> 
     <property name="theBo" ref="theBoc"/> 
    </bean> 
</beans> 

LoggingAspect 클래스에 theBo을 어떻게 주입 할 수 있습니까? 2012년 10월 17일


업데이트 나는 여기에 몇 가지 단서를 발견했다. <aop:aspectj-autoproxy>을 제거하면 LoggingAspect 멤버 변수 theBo이 null이되지 않습니다. 그 코드가 있으면 theBo는 null이됩니다.

+1

? 내가 아는 한 제대로 작동해야합니다. – axtavt

+0

'theBo' 여전히 null입니다. – huahsin68

+0

@Resource 주석으로 theBo에 주석을 달고 작동하는지 알려주십시오. –

답변

2

일반적으로 Spring은 빈 생성 및 구성을 담당합니다. 그러나 AspectJ 측면은 AspectJ 런타임에 의해 생성됩니다. 이 만든 애스펙트를 구성하려면 Spring이 필요합니다. 위의 LoggingAspect 위와 같은 싱글 톤 애스펙트의 가장 일반적인 경우 AspectJ은 애스펙트 인스턴스를 반환하는 aspectOf() 메서드를 정의합니다. 애스펙트 인스턴스를 가져 오는 팩토리 메서드로 에 aspectOf() 메서드를 사용한다고 말할 수 있습니다. 예컨대 : 들어

<beans>  
     <bean name="loggingAspect" 
     class="org.huahsin.LoggingAspect" 
     factory-method="aspectOf"> 
     <property name="theBo" ref="theBoc"/> 
     </bean> 

     <bean id="theBoc" class="org.huahsin.BocImpl"/> 
    </beans> 

UPDATE :

이 클래스의 팩토리 메소드를 정의

정확히 문제가 무엇
@Aspect 
public class LoggingAspect { 

    private IBoc iBoc; 

    private static LoggingAspect instance = new LoggingAspect(); 

    public static LoggingAspect aspectOf() { 
     return instance; 
    } 

    public void setiBoc(IBoc iBoc) { 
     this.iBoc = iBoc; 
    } 
} 
+0

이 오류가 발생했습니다 -> javax.servlet.ServletException : ServletContext 자원 [/WEB-INF/auditlog-spring-context.xml]에 정의 된 이름 'loggingAspect'로 bean을 만드는 동안 오류가 발생했습니다 : 일치하는 팩토리 메소드가 없습니다. factory 메소드 'aspectOf ' – huahsin68

+0

스프링 구성에 행을 추가하십시오. 또한 추가하는 것을 잊지 마십시오 :

+0

이 오류에 대한 바로 가기가 있습니까? -> 원인 : java.lang.IllegalStateException : ClassLoader [com.ibm.ws.classloading.internal.UnifiedClassLoader]는 'addTransformer (ClassFileTransformer)'메소드를 제공하지 않습니다. 사용자 정의 LoadTimeWeaver를 지정하거나 Spring의 에이전트 인 Java 가상 머신을 시작하십시오. -javaagent : spring-agent.jar – huahsin68

관련 문제