फिर एजेडीटी का उपयोग करना चाहते हैं तो केप्लर के साथ प्रयास करें। ;-)
बीटीडब्लू, क्या आपने एजेसी (AspectJ कंपाइलर) के साथ अपने पहलू और जावा कक्षाओं को संकलित किया है? या आप उन्हें javac से संकलित करना चाहते हैं? इस मामले में आपको रनटाइम (एलटीडब्ल्यू, लोड-टाइम बुनाई) के दौरान पहलुओं को बुनाई की आवश्यकता होती है और बुनाई एजेंट (-javaagent:path/to/aspectjweaver.jar
) और aop.xml
में संबंधित कॉन्फ़िगरेशन की आवश्यकता होती है। जब आप मुझे बताएंगे कि आप क्या करना चाहते हैं, तो मैं इस जवाब को एक ठोस उदाहरण के साथ अपडेट कर सकता हूं।
अद्यतन: ठीक है, मैं अपने पहलू का परीक्षण किया। इसमें कुछ वाक्यविन्यास त्रुटियां और अन्य समस्याएं शामिल हैं, उदा।
@Before("(execution(* *.*(..))")
में संख्या संख्याएं मेल नहीं खाते हैं। इसके बजाय यह @Before("execution(* *.*(..))")
होना चाहिए।
- बाद में फेंकने वाला एनोटेशन अपवाद बाध्यकारी को याद करता है। यह
@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t")
होना चाहिए। ड्राइवर आवेदन:
अब यहाँ एक पूरी तरह से परीक्षण योग्य स्टैंड-अलोन उदाहरण है
class Application {
public static void main(String[] args) {
new Application().foo();
}
public void foo() {
try {
sayHello("world");
}
catch (Exception e) {
System.out.println("Caught exception: " + e);
}
}
public void sayHello(String recipient) {
System.out.println("Hello " + recipient + "!");
throw new RuntimeException("Oops!");
}
}
पहलू:
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class LoggerAspect {
@Before("execution(* *.*(..))")
public void intercept(JoinPoint jp) {
System.out.println("before " + jp);
}
@After("execution(* *.*(..))")
public void afterReturning(JoinPoint jp) {
System.out.println("after " + jp);
}
@AfterThrowing(pointcut = "execution(* *.*(..))", throwing = "t")
public void logException(JoinPoint jp, Exception t) {
System.out.println("throwing " + jp);
}
}
कैसे & आर संकलित करने के लिए संयुक्त राष्ट्र एजेसी के साथ:
ajc -sourceroots src -1.7 -d bin -cp aspectjrt.jar
अब चलाएँ:
यह मानते हुए कि अपने स्रोत फ़ाइलों src
नाम के एक निर्देशिका में हैं और आप वर्ग फ़ाइलों bin
में समाप्त करना चाहते हैं, यह आप कैसे संकलन है आवेदन:
java -cp bin;aspectjrt.jar Application
before execution(void Application.main(String[]))
before execution(void Application.foo())
before execution(void Application.sayHello(String))
Hello world!
after execution(void Application.sayHello(String))
throwing execution(void Application.sayHello(String))
Caught exception: java.lang.RuntimeException: Oops!
after execution(void Application.foo())
after execution(void Application.main(String[]))
कैसे LTW साथ javac & रन के साथ संकलित करने के लिए:
आप डिबग प्रतीकों के साथ संकलन करने की जरूरत (-g
): अब
<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
<aspects>
<aspect name="LoggerAspect"/>
</aspects>
<weaver>
<include within="*"/>
</weaver>
</aspectj>
आप कर सकते हैं:
javac -g -cp aspectjrt.jar -d bin src\*.java
आप bin\META-INF\aop.xml
(या aop-ajc.xml
) के तहत एक LTW विन्यास की जरूरत है इससे पहले कि आप प्रोग्राम चला सकते हैं बुनाई एजेंट का उपयोग कर आवेदन चलाएं:
java -javaagent:aspectjweaver.jar -cp bin Application
उत्पादन ही है, लेकिन आप की तरह
<weaver options="-verbose -showWeaveInfo">
यह अन्य बुनकर विकल्प जोड़ सकते निम्नलिखित उत्पादन उपज चाहिए अगर आप अधिक देखना चाहते हैं:
[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by before advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.main(java.lang.String[]))' in Type 'Application' (Application.java:3) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by before advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.foo())' in Type 'Application' (Application.java:8) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by before advice from 'LoggerAspect'(LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by after advice from 'LoggerAspect' (LoggerAspect.java)
[[email protected]] weaveinfo Join point 'method-execution(void Application.sayHello(java.lang.String))' in Type 'Application' (Application.java:16) advised by afterThrowing advice from 'LoggerAspect' (LoggerAspect.java)
before execution(void Application.main(String[]))
before execution(void Application.foo())
before execution(void Application.sayHello(String))
Hello world!
after execution(void Application.sayHello(String))
throwing execution(void Application.sayHello(String))
Caught exception: java.lang.RuntimeException: Oops!
after execution(void Application.foo())
after execution(void Application.main(String[]))
आप और भी अधिक की जरूरत है, को जोड़ने वीवर विकल्पों के लिए -debug
विकल्प भी।
http://download.eclipse.org/tools/ajdt/44/dev/update/:
मैं ग्रहण पर बस "सर्वर पर चलाएं ..." कर रहा हूं, इसलिए मैं एक सरल जाव कर रहा हूं। – Keetah
क्या आपने कभी पहले AspectJ का उपयोग किया है? मेरा मतलब है, आप कितना जानते हैं? कृपया विस्तृत करें, इसलिए मुझे पता है कि कहां से शुरू करना है। और क्या आप पहली बार एक सादे जावा एसई प्रोग्राम पर सर्वर के बिना परीक्षण कर सकते हैं? – kriegaex
ठीक है, मैंने जवाब को अद्यतन किया है और नमूना कोड और सीटीडब्ल्यू और एलटीडब्ल्यू संकलन और चल रहे निर्देशों को जोड़ा है। मुझे आपके एप्लिकेशन सर्वर के बारे में कुछ भी पता नहीं है, इसलिए आपको क्लासपाथ के मुद्दों को अपने आप से बाहर करना होगा, यदि कोई हो। – kriegaex