1. 创建目标类: 首先,创建一个简单的目标类,比如一个服务类。
package com.example.service;
public class MyService {
public void doSomething() {
System.out.println("Doing something...");
}
public void doAnotherThing() {
System.out.println("Doing another thing...");
}
}
2. 创建通知类: 然后,创建一个通知类,它包含了要在切点上执行的逻辑。
package com.example.aspect;
public class MyAspect {
public void beforeAdvice() {
System.out.println("Before advice executed");
}
}
3. 创建Spring配置文件: 接下来,创建一个Spring配置文件(例如,applicationContext.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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- Define the target bean -->
<bean id="myService" class="com.example.service.MyService" />
<!-- Define the aspect bean -->
<bean id="myAspect" class="com.example.aspect.MyAspect" />
<!-- Configure AOP -->
<aop:config>
<!-- Define the pointcut -->
<aop:pointcut id="myPointcut" expression="execution(* com.example.service.*.*(..))" />
<!-- Configure the advice -->
<aop:aspect ref="myAspect">
<aop:before method="beforeAdvice" pointcut-ref="myPointcut" />
</aop:aspect>
</aop:config>
</beans>
4. 使用代理: 在应用程序中使用Spring IoC容器,获取代理对象,并调用目标方法。
package com.example;
import com.example.service.MyService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取代理对象
MyService myService = (MyService) context.getBean("myService");
// 调用目标方法,将触发通知
myService.doSomething();
}
}
在这个例子中,通过<aop:config>元素配置了AOP,并使用<aop:before>元素定义了一个前置通知。该通知在MyService类中的任何方法执行前执行,切点表达式为execution(* com.example.service.*.*(..))。
需要注意的是,以上是基于XML配置的AOP示例,Spring也提供了基于注解的AOP配置,其中切面、切点和通知可以使用@Aspect、@Pointcut和@Before等注解进行定义。选择使用XML配置还是注解配置取决于个人或项目的偏好。
转载请注明出处:http://www.pingtaimeng.com/article/detail/6959/Spring