İlkbahar AOP - Özel Açıklama
PointCut ifadelerine göre, tavsiyenin amaçlanmadığı başka çekirdeklere uygulanmaları söz konusu olabilir. Örneğin, aşağıdaki ifadeyi düşünün.
execution(* com.tutorialspoint.*.getAge(..))
GetAge () yöntemi ile yeni bir bahar fasulyesi eklenir ve amaçlanmasa da tavsiye uygulamaya başlanacaktır. Bunu başarmak için, özel bir açıklama oluşturabilir ve tavsiyenin uygulanacağı yöntemlere açıklama ekleyebiliriz.
@Before("@annotation(com.tutorialspoint.Loggable)")
@Before Advice ile ilgili yukarıda belirtilen kavramları anlamak için, @ Before Advice uygulamasını uygulayacak bir örnek yazalım. Örneğimizi birkaç tavsiyeyle yazmak için, yerinde çalışan bir Eclipse IDE'ye sahip olalım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları kullanalım.
Adım | Açıklama |
---|---|
1 | İlkbahar AOP - Uygulama bölümünde oluşturulan öğrenci projesini güncelleyin . |
2 | Fasulye yapılandırmasını güncelleyin ve uygulamayı aşağıda açıklandığı gibi çalıştırın. |
Aşağıdakilerin içeriği Logging.javadosya. Bu aslında çeşitli noktalarda çağrılacak yöntemleri tanımlayan bir görünüm modülü örneğidir.
package com.tutorialspoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class Logging {
/**
* This is the method which I would like to execute
* before a selected method execution.
*/
@Before("@annotation(com.tutorialspoint.Loggable)")
public void beforeAdvice(){
System.out.println("Going to setup student profile.");
}
}
Aşağıdakilerin içeriği Loggable.java dosya -
package com.tutorialspoint;
public @interface Loggable {
}
Aşağıdakilerin içeriği Student.java dosya.
package com.tutorialspoint;
public class Student {
private Integer age;
private String name;
public void setAge(Integer age) {
this.age = age;
}
public Integer getAge() {
System.out.println("Age : " + age );
return age;
}
public void setName(String name) {
this.name = name;
}
@Loggable
public String getName() {
System.out.println("Name : " + name );
return name;
}
public void printThrowException(){
System.out.println("Exception raised");
throw new IllegalArgumentException();
}
}
Aşağıdakilerin içeriği MainApp.java dosya.
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
Student student = (Student) context.getBean("student");
student.getName();
student.getAge();
}
}
Yapılandırma dosyası aşağıdadır Beans.xml.
<?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"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<aop:aspectj-autoproxy/>
<!-- Definition for student bean -->
<bean id = "student" class = "com.tutorialspoint.Student">
<property name = "name" value = "Zara" />
<property name = "age" value = "11"/>
</bean>
<!-- Definition for logging aspect -->
<bean id = "logging" class = "com.tutorialspoint.Logging"/>
</beans>
Projeyi Çalıştır
Kaynak ve yapılandırma dosyalarını oluşturmayı tamamladığınızda, uygulamanızı çalıştırın. Uygulamanızda MainApp.java'ya sağ tıklayın verun as Java Applicationkomut. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır.
Going to setup student profile.
Name : Zara
Age : 11