Spring框架AOP开发注解的使用

1、前提配置

<!-- 添加如下配置,启用aop注解 -->
<aop:aspectj-autoproxy/>
<!--扫描注解-->
<context:component-scan base-package="service"/>

2、定义原始类

@Service
public class UserServiceImpl implements UserService {
    @Override
    public void add() {
        System.out.println("添加了");
    }

    @Override
    public void delete() {
        System.out.println("删除了");
    }

    @Override
    public String getAll() {

        System.out.println("查到了所有");
        return "";
    }

    @Override
    public void getOne() {
        System.out.println("查到一个");
    }

    @Override
    public void update() {
        System.out.println("更新了");

    }
}

3、创建切面类MyAspect

@Component//将类注入到ioc容器中
@Aspect//声明当前类是一个切面类
public class MyAspect {
    @Pointcut("execution(* service.UserService.add())")
    public void m1(){}
     @Pointcut("execution(* service.UserService.delete())")
    public void m2(){}
     @Pointcut("execution(* service.UserService.getAll())")
    public void m3(){}
     @Pointcut("execution(* service.UserService.getOne())")
    public void m4(){}
     @Pointcut("execution(* service.UserService.update())")
    public void m5(){}


    @Before("m1()")
    public void before(){
        System.out.println("前置");
    }
    @After("m2()")
    public void after(){
        System.out.println("后置");
    }
    @AfterReturning("m3()")
    public void afterRetruning(){
        System.out.println("有返回值执行");
    }
    @AfterThrowing("m4()")
    public void afterThrowing(){
        System.out.println("异常后执行");
    }
    @Around("m5()")
    public void around(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.currentTimeMillis();
        pjp.proceed();//目标方法的调用
        long end = System.currentTimeMillis();
        System.out.println("环绕通知" +
                (end - start) +
                "毫秒");

    }

}

4、测试

@RunWith(SpringJUnit4ClassRunner.class) //由SpringJUnit4ClassRunner启动测试
@ContextConfiguration("classpath:spring-config.xml") //spring的配置文件位置
//本测试类是在test包下所以要导入上面注解
//作用:1、可以免去工厂的创建过程;2、可以直接将要测试的组件注入到测试类。
public class user {
    @Autowired
    UserService userService;
    @Test
    public void test1() {
       userService.add();
    }


    @Test//这种调用方法和上面效果一样
    public void test2(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
        UserService bean = ac.getBean(UserService.class);
        bean.add();



    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值