Spring AOP 全自动编程
目标:明白什么是全自动织入。
第一步:导入jar包
上述jar包链接地址:链接: https://pan.baidu.com/s/1z9fviY2dJRWeTjBNoxBMfw 提取码: gbq7
第二步:建立一个目标类
2.1、首先建立一个目标类的接口IUserService
public interface IUserService {
public void addUser();
public void updateUser();
public void deleteUser();
}
2.2、再建立一个目标类UserServiceImpl,实现接口中的方法
public class UserServiceImpl implements IUserService{
@Override
public void addUser() {
System.out.println("添加用户");
}
@Override
public void updateUser() {
System.out.println("更新用户");
}
@Override
public void deleteUser() {
System.out.println("删除用户");
}
}
2.3、建立一个切面类MyAspect
注意:导包的时候,注意MethodInterceptor不是cglib下的类,而是aopalliance下的包
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAspect implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
System.out.println("前......");
Object obj = methodInvocation.proceed();
System.out.println("后......");
return obj;
}
}
第三步:配置Spring
新建一个beans.xml文件放置在src资源目录下,看我上方的目录结构图!
<?xml version="1.0" encoding="UTF-8"?>
<!--xmlns xml namespace:xml命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p ="http://www.springframework.org/schema/p"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--业务类-->
<bean id="userService" class="com.xianzhou.service.Impl.UserServiceImpl"/>
<!--切面类-->
<bean id="MyAspect" class="com.xianzhou.myaspect.MyAspect"/>
<!--AOP编程步骤
1.导入命名空间
2.proxy-target-class="true" 使用cglib代理
3.aop:pointcut:切入点,从目标对象获取具体方法
切入点表达式:
execution(*com.xianzhou.*.*(..))"
选择方法 返回值任意 包 类名任意 方法名任意 参数任意
4.特殊的切入面
advice-ref:通知
poinycut-ref:切入点引用
-->
<aop:config proxy-target-class="true">
<aop:pointcut id="MyPointCut" expression="execution(* com.xianzhou.service.*.*(..))"/>
<aop:advisor advice-ref="MyAspect" pointcut-ref="MyPointCut"/>
</aop:config>
</beans>
第四步:建立一个测试类测试上述代码是否有问题:
可使用单元测试的方法或者直接在main里面测试,单元测试需要导入JUnit4的jar包
JUnit4包的链接:链接: https://pan.baidu.com/s/1ArOw391g8k8GwHvFnjWCPQ 提取码: a6uh
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringAopTest {
@Test
public void test1(){
ApplicationContext context =new ClassPathXmlApplicationContext("beans1.xml");
// IUserService proxyService = (IUserService) context.getBean("proxyService");
IUserService userService = (IUserService)context.getBean("userService");
userService.addUser();
userService.deleteUser();
userService.updateUser();
}
}
第五步:测试结果如下