Spring 二、Spring-AOP面向切面编程

Spring-AOP

AOP使用步骤

在Maven配置中导包

<!--在Maven配置中导入-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.1.9.RELEASE</version>
      </dependency>

在xml文件中导入aop


<!--在Maven配置中导入-->

    <beans 
        xmlns:aop="http://www.springframework.org/schema/aop"
        
        <!--软件自动导入-->
        xsi:schemaLocation="http://www.springframework.org/schema/aop"
    </beans>

    <aop:aspectj-autoproxy proxy-target-class="true"/>

定义切面类

注意需要在Spring中注册同时也需要声明成切面类

    //Spring注册
    @Component
    //声明切面
    @Aspect
    public class Aspect {
        
    }

定义切入点(切面类中)

注意不能写内容不能有返回值

@Pointcut("execution(* com.qf.spingTest.dao.impl.UserDaoImpl.addShop(..))")
    public void pointcut(){

    }

注解属性

execution([方法的可见性] 返回类型 [方法所在类的全路径名] 方法名(参数类型列表) [方法抛出的异常类型])

定义注入点(使用注解)

//栗子
    @Before("pointcut()")
    public void befores(){
        System.out.println("前置内容");
    }
    
    @AfterThrowing(value = "pointcut()", throwing = "exception")
    public void appthrow(Exception exception){
        System.out.println("异常内容");
    }

五大常用注解(都有相同或不同的参数)

  1. @Before(“切入点方法”) 前置
  2. @AfterReturning(“切入点方法”) 后置
  3. @AfterThrowing(“切入点方法”) 异常
  4. @Around(“切入点方法”) 环绕
  5. @After 最终

作用类

打个比方作用与这个Demo类
使用了Maven的Test测试(需要导入JUnit)

//JUnit运行注解
@RunWith(SpringJUnit4ClassRunner.class)

//  引入配置文件
@ContextConfiguration("classpath*:applicationContext.xml")

public class TestDemo {
    
    //依赖注入
    @Resource
    UserDaoImpl userDao;
    @Test
    public void UserDaoImpl() throws Exception {
        userDao.addShop();
    }
}

输出结果

    环绕前的代码
    前置内容
    方法执行到这里了
    环绕后的代码
    后置内容

总结

spring-aop

基于动态代理aop实现

对aspects支持

执行顺序

 public void  before(){
        System.out.println("2前置通知");
    }

    public void  method(){
        System.out.println("1.环绕前");
        System.out.println("3.核心方法");
        System.out.println("4.环绕后");
    }

    public  void  after(){
        System.out.println("5.后置通知");
    }

    public  void  afterThrow(Exception ex){
        System.out.println("4.异常通知");
    }


    public void  finallyMethod(){
        System.out.println("6.最终通知");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值