jar包和工程目录
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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--目标对象-->
<bean id="userService" class="com.baidu.oriAop.UserServiceImp"></bean>
<!--增强-->
<bean id="myMethodBeforeAdvice" class="com.baidu.oriAop.MyMethodBeforeAdvice"></bean>
<!--将目标对象与增强进行结合-->
<bean id="myRegexpMethodPointcutAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="myMethodBeforeAdvice"></property>
<!--正则表达式-->
<property name="patterns" value=".*add.*,.*del.*"></property>
</bean>
<!-- one- 原生开发代理对象-->
<!-- <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="userService"></property>
<property name="interceptorNames" value="myRegexpMethodPointcutAdvisor"></property>
<property name="interceptorNames" value="com.baidu.oriAop.MyMethodBeforeAdvice"></property>
<property name="interfaces" value="com.baidu.oriAop.UserServiceI"></property>
</bean>-->
<!--two-通过bean名称自动创建代理-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames" value="*Service"></property>
<property name="interceptorNames" value="myRegexpMethodPointcutAdvisor"></property>
</bean>
</beans>
接口和实现类
package com.baidu.oriAop;
public interface UserServiceI {
void add();
void del();
String findName();
}
package com.baidu.oriAop;
public class UserServiceImp implements UserServiceI {
@Override
public void add() {
System.out.println("add---");
}
@Override
public void del() {
System.out.println("del---");
}
@Override
public String findName() {
System.out.println(" findName");
return "Lisi";
}
}
开发类
package com.baidu.oriAop;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class MyMethodBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("前置通知");
}
}
测试类
package com.baidu.oriAop;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestOri {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
/* UserServiceI bean = (UserServiceI)applicationContext.getBean("proxy"); */
UserServiceI bean = (UserServiceI)applicationContext.getBean("userService");
bean.add();
bean.del();
bean.findName();
}
}
结果
//原生开发
前置通知
add---
前置通知
del---
findName
Process finished with exit code 0