рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдПрдУрдкреА рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВ рдПрдУрдкреА рдХреЗ рд╕рд╛рд░ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╡реЗрдмрд▓реЙрдЬрд┐рдХ, google.com рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ AOP рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдХрднреА AOP рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред
рд╕рдорд╕реНрдпрд╛ рдирдВрдмрд░ 1
рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдУрдкреА - рдПрдХ рдкреНрд░реЙрдХреНрд╕реА-рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИредрдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЗрдердбреНрд╕ (рдореЗрдердбрд╛рд╕) рдореЗрдердбреНрд╕ (рдореЗрдердбрд╛рд╕, рдореЗрдердбрдм) рд╣реИ, рдЬрдмрдХрд┐ рдореЗрдердбрдм () рдореЗрдердб (рдП) рдФрд░ рдЖрд╕реНрдкреЗрдХреНрдЯ (рдмрд╛рдж рдореЗрдВ) рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореЗрдердб (рдП) рдХрд╣рддреЗ рд╣реИрдВред
public class ClassA { public void methodA() { System.out.println("methodA"); } public void methodB() { System.out.println("methodB"); methodA(); } } public class AspectClass { public void aspectMethodA() { System.out.println("Aspect on method A"); } }
рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдЬреЛ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рдЗрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:
public void execute() {
рдРрд╕реА рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо (рдорд╛рдирдХ рд╕реНрдкреНрд░рд┐рдВрдЧ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╣реЛрдЧрд╛:
methodA Aspect on method A methodB methodA
рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИ, рджреВрд╕рд░реА рдмрд╛рд░ рдкрд╣рд▓реВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдПрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 2
рддрд░реАрдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЕрдиреНрдп рд╕реВрдЪрдирд╛рддреНрдордХ рд╕рд╛рд╣рд┐рддреНрдп рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛:
- рд▓реЛрдб-рдЯрд╛рдЗрдо рдмреБрдирд╛рдИ (LTW)ред
- рд╕рдВрдХрд▓рди-рд╕рдордп рдХреА рдмреБрдирд╛рдИ (CTW)ред
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ
LTW рдкрд░ рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд┐рд▓реЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдирд┐рд░реНрдЧрдо рдореВрд▓реНрдп:
- рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ .xml рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЕрдкрдирд╛ рдкреЙрдЗрдВрдЯрдХрдЯ-рдПрд╕, рдкрд╣рд▓реВ-рдПрд╕ рд▓рдЧрд╛рддреЗ рд╣реИрдВред
- рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ anop.xml рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмреБрдирдХрд░ (рд╡рд░реНрдЧреЛрдВ рдЬреЛ рд╕реАрдзреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ), рдкрд╣рд▓реБрдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдкреЙрдЗрдВрдЯрдХрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдЕрдм рд╕реАрдзреЗ рдкрд╣рд▓реВ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдКрдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
@Before( "execution(* com.solutions. web.test.WebTestClass.testA())") public void testALog() {}
- рдкрд╣рд▓реВ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдКрдкрд░
@Aspect
рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред - JM / WebLogic рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдПрдХ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
-javaagent:${PATH_TO_LIB }/aspectjweaver.jar
рдЯрд┐рдкреНрдкрдгреА
рдпрджрд┐ рдЖрдк
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (anop.context):
<weaver> <include within="foo.*"/> </weaver> <aspects> <aspect name="foo.ProfilingAspect"/> </aspects>
рд╣рд╛рдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмреНрдпреВрдЯ - рд╣рдо рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣рдорд╛рд░реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛрдб рдФрд░ рд╕реАрдзреЗ рдПрдХ рд╡рд░реНрдЧ / рдкреИрдХреЗрдЬ рдореЗрдВ рдкрд╣рд▓реВ рдХреЛрдб рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд░реНрдгрди рдореЗрдВ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ (ClassA) рдФрд░ рдПрдХ рдкрд╣рд▓реВ (AspectA) рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди aop.xml рдПрдХ рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛрдЧрд╛:
<weaver> <include within="com.example.ClassA"/> <include within="com.log.* "/> <!тАФ > </weaver> <aspects> <aspect name="com.log.AspectA"/> </aspects>
рдЯреИрдЧ рдореЗрдВ
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
-
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
-
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
-
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
+ .
тДЦ 3
LTW EAR/APP .
"As Costin said, there is unfortunately nothing we can do about this. Load-time weaving only works for specific deployment units such as WARs, and even there it is considered an advanced feature that won't work in all runtime environments.тАЭ
.
, CTW. :
- , aspect- pointcut-. C pointcut-, . ajc-, (ant, maven, gradleтАж).
тДЦ 4
CTW+LTW .
, LTW classpath TW :
java.lang.Exception: java.lang.NoSuchMethodError: com.aop.example.log.AspectA.aspectOf()Lcom/aop/example/log/AspectA;
LTW рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдХреБрд▓
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЬреЛ рдЪрд╛рд╣рд╛ рд╡рд╣ рдЬреЛрдбрд╝рд╛ рд╣реИ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
- рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐рдпреЛрдВ (EAR / APP, WEB рд╕реНрддрд░) рдХреЗ рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╕рдВрдкреВрд░реНрдг WEB рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЧреИрд░-рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐рдпрд╛рдБ LTW (рдпрджрд┐ CTW рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВред
- рд╕рдВрдкреВрд░реНрдг APP рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЧреИрд░-рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рддрд░реАрдХреЗ CTW (рдпрджрд┐ LTW рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
app.context тАЬweavтАЭ aspect-.
рдХреЗ рдЯреИрдЧ рдореЗрдВ app.context тАЬweavтАЭ aspect-.
CTW рдФрд░ LTW рд╕рдВрдЧрдд рддрдХрдиреАрдХ рдирд╣реАрдВ рд╣реИрдВред