스프링을 사용하여로드 시간에 기존 tomcat webapp에 aspect를 직조 할 수 있습니다. & AspectJ. 나는 생성자 pointcut을 수행해야하기 때문에 AspectJ를 사용하고있다.
두 가지 테스트 시나리오가 있습니다. 하나는 내 애스펙트가 간단한 서블릿 애플리케이션의 일부입니다. 애플리케이션에 애스펙트 소스가 포함되어 있으며 MVN과 aspectJ 플러그인을 사용하여 WAR과 Aspect를 컴파일합니다. 이 부분은 예상대로 작동합니다. 두 번째 시나리오는 aspect를 자체 프로젝트로 분리하고 AJC와 AJDT를 모두 사용하여 JAR 파일로 컴파일하고 war/WEB-INF/lib 폴더에 jar 파일을 포함시킨다. war 파일 컨텍스트가로드 될 때 Aspect가 선택되지만 war 파일의 모든 개체에는 적용되지 않는 것으로 보입니다.WebApp에서 LTW를 작동시키는 데 필요한 트릭은 무엇입니까?
<aspectj>
<aspects>
<aspect name="com.ddvc.ivr.ProjectMonitor" />
</aspects>
</aspectj>
그리고 내 스프링 컨텍스트 : 나는 웹 응용 프로그램/META-INF 폴더에 aop.xml 파일을 포함했다
@SuppressWarnings("unused")
public aspect ProjectMonitor{
pointcut constr() : call(com.avaya..*.new(..)) ;
Object around() : constr(){
System.out.println("In Constructor for "
+ thisJoinPointStaticPart.getSignature());
Object ret = proceed();
return ret;
}
pointcut publicOperation() : execution(public * *.*(..));
Object around() : publicOperation() {
long start = System.nanoTime();
Object ret = proceed();
long end = System.nanoTime();
System.out.println(thisJoinPointStaticPart.getSignature() + " took "
+ (end - start) + " nanoseconds");
return ret;
}
pointcut callConst() : call(public *..*SCESession.new(..));
public Object callConst(ProceedingJoinPoint jp) throws Throwable {
System.out.println("In Project Monitor!!!");
return jp.proceed();
}
}
: 여기
는 화면 코드 파일은 다음과 같이 표시됩니다.<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:load-time-weaver aspectj-weaving="on" />
<context:spring-configured />
<context:component-scan base-package="com.avaya.sce.runtimecommon"/>
<context:annotation-config />
<aop:aspectj-autoproxy />
<!-- Aspect Mapping -->
<bean id="monitor" class="com.ddvc.ivr.ProjectMonitor" factory-method="aspectOf"/>
</beans>
아주 똑바로, 맞습니까? 나는 심지어 -javaagent 세트를 가지고 :
export JAVA_OPTS="-Xmx1024M -Xms1024M -server -javaagent:/software/apache-tomcat-6.0.36/lib/spring-instrument-3.2.1.RELEASE.jar"
왜 소스가 WAR 파일로 컴파일하지만이 클래스 경로에 JAR 파일을 포함 할 때, 그것은 전혀 작동하지 않습니다이 작동합니다. 전쟁 상황에 맞는 파일을 다시로드 할 때 내가 바람둥이 로그에 다음을 참조
여러 번 파일 :
11 : 27 : 51,285 DEBUG GenericTypeResolver : 151 - [공공 정적 조직에 대한 반환 유형을 해결합니다. 구체적인 메소드 인수 [{}]가있는 .
모두/전체 답글 감사합니다! 미리 감사드립니다, 그리프