spring Aop使用示例

admin2024-05-15  0

简介(aop作用):1.在不改变源代码的基础上进行功能添加,如日志打印、执行时间统计。2.与代理效果类似但更加便捷。

示例:

        maven依赖:

      <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.20</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.7</version>
        </dependency>
<!--        测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        dao接口:

public interface UserDao {
    public void save();
}

        dao实现类:

@Component  //声明为组件
public class UserDaoIim  implements UserDao {
    @Override
    public void save() {
        System.out.println("save");
    }
}

        spring配置类(@EnableAspectJAutoProxy):

@Configuration //定义为配置类
@ComponentScan("")//包扫描
@EnableAspectJAutoProxy //开启aop
public class SpringConfig {

}

        通知类(核心):

@Aspect
@Component
public class MyAop {
    @Pointcut("execution(void com.dt.dao.UserDao.save())")//单的方法增强
   // @Pointcut("execution(void com.dt.dao.UserDao.*(参数))")//对所有方法增强,参数没有就不填
    public void pt(){}

    @Before("pt()")//对切点pt所代理的方法执行前增强
    public void  before(){
        System.out.println("执行前增强");
    }

    @After("pt()")//对切点pt所代理的方法执行后增强
    public void  after(){
        System.out.println("执行后增强");
    }

    @Around("pt()")//对切点pt所代理的方法执行环绕增强
    public void  around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("around,执行前增强");
        joinPoint.proceed();
        System.out.println("around,执行后增强");
    }

    @AfterReturning("pt()")//对切点pt所代理的方法返回后通知
    public void  fterReturning()  {
        System.out.println("执行后返回增强");
    }

    @AfterThrowing("pt()")//对切点pt所代理的方法报错后通知
    public void  afterThrowing()  {
        System.out.println("执行报错后增强");
    }
}

        测试:

public class MyTest {

    private UserDao userDao;

    @Test
    public void springs(){
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springConfig.xml");
        userDao = applicationContext.getBean(UserDao.class);
        userDao.save();
    }
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!