Spring AOP - Proxy
Sejauh ini, kami telah mendeklarasikan aspek menggunakan <aop:config> atau < aop:aspectj-autoproxy>. Kita dapat membuat proxy secara terprogram serta menjalankan aspek secara terprogram menggunakan objek proxy.
Sintaksis
//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();
Dimana,
AspectJProxyFactory - Kelas pabrik untuk membuat objek proxy.
Logging.class - Kelas Aspek yang berisi nasihat.
Student - Kelas bisnis untuk dinasihati.
Untuk memahami konsep yang disebutkan di atas terkait dengan proxy, mari kita tulis sebuah contoh yang akan mengimplementasikan proxy. Untuk menulis contoh kami dengan beberapa saran, mari kita memiliki IDE Eclipse yang berfungsi dan gunakan langkah-langkah berikut untuk membuat aplikasi Spring -
Langkah | Deskripsi |
---|---|
1 | Perbarui proyek yang dibuat Siswa di bawah bab Spring AOP - Application . |
2 | Perbarui konfigurasi kacang dan jalankan aplikasi seperti yang dijelaskan di bawah ini. |
Berikut ini adalah konten dari Logging.javamengajukan. Ini sebenarnya adalah contoh modul aspek, yang mendefinisikan metode yang akan dipanggil di berbagai titik.
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.");
}
}
Berikut ini adalah konten dari Student.java mengajukan.
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;
}
}
Berikut ini adalah konten dari MainApp.java mengajukan.
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();
}
}
Berikut adalah file konfigurasinya 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>
Jalankan Proyek
Setelah Anda selesai membuat file sumber dan konfigurasi, jalankan aplikasi Anda. Klik kanan pada MainApp.java di aplikasi Anda dan gunakanrun as Java Applicationperintah. Jika semuanya baik-baik saja dengan aplikasi Anda, itu akan mencetak pesan berikut.
Going to setup student profile.
Age : 11