..
Ας δούμε τώρα πώς να δημιουργήσετε μια πτυχή.
Πρώτα απ 'όλα να δημιουργήσουμε μια διασύνδεση με το οποίο το παράδειγμα θα γράψουμε pointcuts μας:
δημόσια διεπαφή MyInterface {
δημόσια f1 άκυρη ()?
δημόσια int f2 ()?
δημόσια int f3 () ρίχνει Εξαίρεση?
δημόσια f4 άκυρη () ρίχνει Εξαίρεση?
δημόσια int f5 ()?
}
Για να γράψετε μια pointcut πρέπει να γνωρίζετε τα AspectJ Οι σημάνσεις pointcut , στο παράδειγμά μας θα χρησιμοποιήσουμε μόνο εκτέλεσης που να ταιριάζει με το σύνδεσμο των μεθόδων εκτέλεσης σημείο.
εκτέλεσης (τροποποιητές-μοτίβο; Η ανακήρυξη του αναδρομικού τύπου μοτίβο τύπου μοτίβο; όνομα-μοτίβο (param-πρότυπο) ρίχνει-πρότυπο;)όπου:
Πρώτα πρέπει να δημιουργήσουμε τη δική μας πλευρά:
@ Aspect
{Δημόσια τάξη MyAspect
.............
}
Όπως βλέπουμε η κλάση είναι σχολιασμένο με @ Aspect.
Αυτό δεν είναι αρκετό, γιατί πρέπει να ενεργοποιήσετε την υποστήριξη για AOP nell'applicationContext XML.:
<-! ENBLING AspectJ -> <aop:aspectj-autoproxy /> <-! MYASPECT -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Αφού έχετε κάνει αυτές τις δύο επιχειρήσεις είναι έτοιμοι να δημιουργήσετε μια συμβουλή, για παράδειγμα, μια ενέργεια που πραγματοποιείται πριν από την εκτέλεση της F1 μεθόδου (πριν από την παροχή συμβουλών):
@ Πριν ("εκτέλεση (* it.mrwebmaster.aop.MyInterface.f1 (..))")
δημόσια beforeF1 άκυρη () {
System.out.println ("ΠΡΙΝ F1")?
}
Όπως φαίνεται από τον κώδικα που χρησιμοποίησε το @ Πριν σχολιασμών που δέχεται μια έκφραση ως μια τιμή που προσδιορίζει ένα pointcut.
Στο παράδειγμά μας, η έκφραση ταιριάζει με όλες τις μεθόδους που καλούνται interface it.mrwebmaster.aop.MyInterface F1 indipendetemente από τροποποιητές τους, τύπος επιστροφής και οι παράμετροι εισόδου.
Επίσης μπορούμε να χρησιμοποιήσουμε μια συμβουλή που εκτελείται όταν μια μέθοδος ολοκληρώνει την εκτέλεσή του (μετά την επιστροφή συμβουλών) να χρησιμοποιήσει σωστά το σχολιασμό @ AfterReturning:
@ AfterReturning (pointcut = "εκτέλεση (* it.mrwebmaster.aop.MyInterface.f2 (..))", επιστροφή =" RETVAL ")
δημόσια afterReturningF2 κενό (Object RETVAL) {
System.out.println ("RETURN F2" + RETVAL)?
}
Η εγγραφή αυτή παίρνει τις ακόλουθες παραμέτρους, εκτός από pointcuts, το όνομα που δόθηκε προς το αντικείμενο που επιστρέφεται από τη μέθοδο που μπορεί να δοθεί ως παράμετρος εισόδου Advaita.
Στην περίπτωση αυτή η έκφραση της pointcut είναι inviarata εκτός από το όνομα της μεθόδου, η οποία στην περίπτωση αυτή, f2.
@ AfterThrowing (pointcut = "εκτέλεση (* it.mrwebmaster.aop.MyInterface.f3 (..))", ρίχνοντας =" throwable ")
δημόσια άκυρη afterThrowingF3 (Throwable throwable) {
System.out.println ("F3 ρίχνει" + throwable)?
}
Η διαφορά είναι ότι η μέθοδος δεν επιστρέφει ένα αντικείμενο αλλά μια εξαίρεση.
Ένας άλλος τύπος συμβουλών είναι πάντα εκτελείται μετά από μια μέθοδο, είναι καιρός κανονικά ή ρίχνει μια εξαίρεση (κατόπιν συμβουλών). Αυτή η συμβουλή υλοποιείται μέσω της χρήσης @ Μετά από:
@ Μετά ("εκτέλεση (* it.mrwebmaster.aop.MyInterface.f4 (..))")
δημόσια afterF4 άκυρη () {
System.out.println ("ΜΕΤΑ F4")?
}
Τέλος θα δούμε πώς να κάνει το «γύρω από συμβουλές:
@ Γύρω ("εκτέλεση (* it.mrwebmaster.aop.MyInterface.f5 (..))")
δημόσια άκυρη aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("ΠΡΙΝ F5")?
try {
Αντικείμενο RETVAL = pjp.proceed ()?
System.out.println ("F5 ΕΠΙΣΤΡΟΦΗ" + RETVAL)?
} Αλιευμάτων (Throwable ε) {
System.out.println ("F5 ρίχνει" + e)?
}
}
Όπως μπορούμε να δούμε από τον κωδικό της έκφρασης pointcut δεν είναι διαφορετική από τις άλλες συμβουλές.
Αυτό που αλλάζει είναι η ίδια συμβουλή ότι πρέπει να επικαλεστούν ρητά την εκτέλεση της μεθόδου με τη μέθοδο της τάξης ProceedingJoinPoint προχωρήσει, το ένα του οποίου η αίτηση μεταβιβάζεται ως είσοδος.
Αυτή η διεπαφή παρέχει, επίσης, χρησιμοποιεί άλλες μεθόδους προχωρήσει στην ανάκτηση πληροφοριών σχετικά με τις παραμέτρους μέθοδος, τύπος επιστροφής και το αντικείμενο πάνω στο οποίο η μέθοδος εκτελείται.
Επαφίεται στον αναγνώστη κάθε βαθύτερο.
Για να ελέγξετε τις συμβουλές μας που μπορούμε να κάνουμε είναι να γράψετε ένα ασήμαντο εφαρμογή του MyInterface interface, και να δημιουργήσει μια κύρια δοκιμή:
MyInterfaceImpl {δημόσια τάξη υλοποιεί MyInterface
@ Παράκαμψη
δημόσια f1 άκυρη () {
System.out.println ("F1")?
}
@ Παράκαμψη
δημόσια int f2 () {
System.out.println ("F2")?
επιστροφή 0?
}
@ Παράκαμψη
δημόσια int f3 () ρίχνει Εξαίρεση {
System.out.println ("F3")?
ρίξει νέο Εξαίρεση ("Εξαίρεση F3")?
}
@ Παράκαμψη
δημόσια f4 άκυρη () ρίχνει Εξαίρεση {
System.out.println ("F4")?
}
@ Παράκαμψη
δημόσια int f5 () {
System.out.println ("F5")?
επιστροφή 0?
}
}
. nell'applicationContext xml:
<! - Στόχος: Object -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />Η κύρια δοκιμή:
δημόσια τάξη Κύρια {
δημόσια στατική άκυρη κύρια (String [] args) {
/ **
* Instanz η ΔΟΕ δοχείο
* /
ApplicationContext ApplicationContext ClassPathXmlApplicationContext = νέο ("applicationContext.xml")?
MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl")?
myInterface.f1 ()?
System.out.println ("########## \ n ")?
myInterface.f2 ()?
System.out.println ("########## \ n ")?
try {
myInterface.f3 ()?
} Αλιευμάτων (Εξαίρεση ε) {}
System.out.println ("########## \ n ")?
try {
myInterface.f4 ()?
} Αλιευμάτων (Εξαίρεση ε) {}
System.out.println ("########## \ n ")?
myInterface.f5 ()?
System.out.println ("########## \ n ")?
}
}
| |
Linux (Μάθημα)
Πλήρης οδηγός για την open-source σύστημα. Από 49 €. |
| |
PHP (Μάθημα)
Η πλήρης σειρά μαθημάτων για τη δημιουργία δυναμικών ιστοσελίδων. Από 49 €. |
| |
Ruby και Ruby on Rails (Μάθημα)
Δημιουργία λογισμικού και Web εφαρμογές με Ρουμπίνι και RoR. Από 39 €. |