目标:明白什么是全自动织入。

第一步:导入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();
    }
}

第五步:测试结果如下