Вкратце:
а) spring.xml
<aop:aspectj-autoproxy />
<bean id="circle" class="org.tutorial.spring.model.Circle">
<property name="name" value="Circle name" />
</bean>
<bean id="triangle" class="org.tutorial.spring.model.Triangle">
<property name="name" value="Triangle name" />
</bean>
<bean id="shapeService" class="org.tutorial.spring.service.ShapeService" autowire="byName" />
<bean class=" org.tutorial.spring.aspect.LoggingAspect" />
б) Класс ShapeService
package org.tutorial.spring.service;
import org.tutorial.spring.model.Circle;
public class ShapeService {
private Triangle triangle;
private Circle circle;
public Triangle getTriangle() {
return triangle;
}
public void setTriangle(Triangle triangle) {
this.triangle = triangle;
}
public Circle getCircle() {
return circle;
}
public void setCircle(Circle circle) {
this.circle = circle;
}
}
в) Класс кружка
package org.tutorial.spring.model;
public class Circle {
private String name;
public String getName() {
System.out.println("Circle getName");
return name;
}
public void setName(String name) {
System.out.println("Circle setName");
this.name = name;
}
}
г) класс LoggingAspect
@Aspect
public class LoggingAspect {
@Before("allCircleMethods()")
public void securityAdvice() {
System.out.println("Security Advice is executed!");
}
@Pointcut("within(org.tutorial.spring.model.Circle)")
public void allCircleMethods() {
}
}
e) класс ShapeAOP (основной класс для запуска)
public class ShapeAOP {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
ShapeService shapeService = ctx.getBean("shapeService", ShapeService.class);
System.out.println(shapeService.getCircle().getName());
}
}
ВЫХОД:
Круг setName
Совет по безопасности выполнен!
Круг getName
Имя круга
Обратите внимание на вывод, что во время создания экземпляра компонента Circle перед «Circle setName» не выполняется «Совет по безопасности».
Почему pointcut внутри класса Circle не применяется к методу Circle setName?
setName()
(например, в вашемmain
) только для того, чтобы убедиться, что совет применяется тогда? - person pap   schedule 19.02.2013