Spring---Aop

2021-02-07 21:17

阅读:704

标签:ssr   runner   tst   hot   system   value   odi   test   使用场景   

Spring Aop介绍:

1.Aop介绍
    Spring Aop是面向切面编程,底层是动态代理。可以实现在不改变源码的情况下,对目标方法进行增强。
Spring Aop支持声明式事务,与编程式事务相比较,声明式事务最大的优点就是不需要通过编程的方式管
理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过
基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
    
    Spring Aop的典型使用场景:
        1.事务管理;
        2.日志记录;
        3.权限控制

2.Spring Aop术语:
        JoinPoint: 连接点:
            所有的方法都可以是连接点;
        Pointcut: 切入点:
            需要进行增强的方法就是切入点;
        Advice: 通知/增强 :
            增强的逻辑就是通知,通知需要切入到切入点中;
            通知分为:
                前置通知;
                后置通知;
                环绕通知;
                异常通知;
                最终通知;
        Aspect: 切面:
            切入点和通知的结合就是切面;
            
3.Aop的使用:
    1.创建工程,导入坐标依赖:
        
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            4.0.0com.it
            spring-aop
            1.0-SNAPSHOTorg.springframework
                    spring-context
                    5.0.2.RELEASEorg.aspectj
                    aspectjweaver
                    1.8.7org.springframework
                    spring-test
                    5.0.2.RELEASEjunit
                    junit
                    4.12test
    
    2.创建Dao接口,定义方法;
        public interface AccountDao {

            void save();

            Object delete();

            void findAll();

            void update();

            void findById();
        }
        
    3.创建Dao接口的实现类,重写接口方法(在这里,这些方法就是需要进行增强的方法)
        public class AccountDaoImpl implements AccountDao {
            public void save() {
                System.out.println("save....");
            }

            public Object delete() {
                System.out.println("delete....");
                return "success";
            }

            public void findAll() {
                //模拟耗时
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("findAll...");
            }

            public void update() {
                System.out.println("update....");
                int i=1/0;
            }

            public void findById() {
                System.out.println("findById.....");
                int i=1/0;
            }
        }
        
    4.创建切面类,类中定义增强逻辑方法:
        public class MyAspect {

            //前置通知,增强逻辑
            public void check(){
                System.out.println("权限校验。。。");
            }
            //后置通知,增强逻辑
            public void log(Object obj){
                System.out.println("日志记录。。。"+obj);
            }
            //环绕通知,增强逻辑
            public void showTime(ProceedingJoinPoint joinPoint) throws Throwable {
                //目标方法调用之前
                System.out.println("调用之前的时间:"+System.currentTimeMillis());
                //调用目标方法
                joinPoint.proceed();
                //目标方法调用之后
                System.out.println("调用之后的时间:"+System.currentTimeMillis());

            }
            //异常通知,增强逻辑
            public void throwException(Exception e){
                System.out.println("异常抛出通知========"+e.getMessage());
            }

            //最终通知,增强逻辑
            public void showFinal(){
                System.out.println("最终通知。。。");
            }

        }
        
    5.配置文件:
        在配置文件中注册Dao实现类和切面类;
        在配置文件中配置aop,在aop中配置切入点和切面,在切面中配置通知;
        
        
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
            
            class="com.it.dao.impl.AccountDaoImpl">class="com.it.aspect.MyAspect">
        
    6.编写测试:
        RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration(value = "classpath:applicationContext.xml")
        public class Test {

            @Autowired
            private AccountDao accountDao;

            @org.junit.Test
            public void fun(){
                accountDao.save();
            }

            @org.junit.Test
            public void fun02(){
                accountDao.delete();
            }

            @org.junit.Test
            public void fun03(){
                accountDao.findAll();
            }

            //测试异常通知
            @org.junit.Test
            public void fun04(){
                accountDao.update();
            }

            //测试最终通知
            @org.junit.Test
            public void fun05(){
                accountDao.findById();
            }


        }

        
    
        
            

 

Spring---Aop

标签:ssr   runner   tst   hot   system   value   odi   test   使用场景   

原文地址:https://www.cnblogs.com/lyle-liu/p/12774173.html


评论


亲,登录后才可以留言!