İlkbahar AOP - Proxy

Şimdiye kadar, kullanarak yönleri açıkladık <aop:config> veya < aop:aspectj-autoproxy>. Proxy nesnesini kullanarak programlı olarak yönleri programlı olarak çağırmanın yanı sıra programlı olarak bir proxy oluşturabiliriz.

Sözdizimi

//Create object to be proxied
Student student = new Student();

//Create the Proxy Factory
AspectJProxyFactory proxyFactory = new AspectJProxyFactory(student);

//Add Aspect class to the factory
proxyFactory.addAspect(Logging.class);

//Get the proxy object
Student proxyStudent = proxyFactory.getProxy();

//Invoke the proxied method.
proxyStudent.getAge();

Nerede,

  • AspectJProxyFactory - Bir proxy nesnesi oluşturmak için fabrika sınıfı.

  • Logging.class - Tavsiyeler içeren Unsur Sınıfı.

  • Student - İş sınıfı tavsiye edilecek.

Proxy ile ilgili yukarıda belirtilen kavramları anlamak için proxy 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.PointCut;
import org.aspectj.lang.annotation.Before;

@Aspect
public class Logging {

   /** Following is the definition for a PointCut to select
    *  all the methods available. So advice will be called
    *  for all the methods.
    */
   @PointCut("execution(* com.tutorialspoint.Student.getAge(..))")
   private void selectGetAge(){}

   /** 
    * This is the method which I would like to execute
    * before a selected method execution.
    */
   @Before("selectGetAge()")
   public void beforeAdvice(){
      System.out.println("Going to setup student profile.");
   }  
}

Aşağıdakilerin içeriği Student.java dosya.

package com.tutorialspoint;

public class Student {
   private Integer age;
  
   public void setAge(Integer age) {
      this.age = age;
   }
   
   public Integer getAge() {
      System.out.println("Age : " + age );
      return age;
   }   
}

Aşağıdakilerin içeriği MainApp.java dosya.

package com.tutorialspoint;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.aop.aspectj.annotation.AspectJProxyFactory;

public class MainApp {
   public static void main(String[] args) {
      ApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");

      Student student = (Student) context.getBean("student");

      //Create the Proxy Factory
      AspectJProxyFactory proxyFactory = new AspectJProxyFactory(student);

      //Add Aspect class to the factory
      proxyFactory.addAspect(Logging.class);

      //Get the proxy object
      Student proxyStudent = proxyFactory.getProxy();

      //Invoke the proxied method.
      proxyStudent.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 ">

   <!-- Definition for student bean -->
   <bean id = "student" class = "com.tutorialspoint.Student">
      <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.
Age : 11