首页 > 其他分享 >【Spring】AOP

【Spring】AOP

时间:2023-04-03 12:11:09浏览次数:33  
标签:userDao Spring void System AOP println public out

添加Maven依赖:

    <!-- aspectj包的依赖 -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.1</version>
    </dependency>
    <!-- aspectjrtweaver包的依赖 -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
    </dependency>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       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 -->
    <bean name="userDao" class="com.xiaobiti.dao.impl.UserDaoImpl"/>
    <bean name="xmlAdvice" class="com.xiaobiti.demo.xmlAdvice"/>
    <!-- 配置Spring AOP -->
    <aop:config>
        <!-- 指定切入点 -->
        <aop:pointcut id="pointcut" expression="execution(* com.xiaobiti.dao.impl.UserDaoImpl.*(..))"/>
        <!-- 指定切面 -->
        <aop:aspect ref="xmlAdvice">
            <!-- 前置通知 -->
            <aop:before method="before" pointcut-ref="pointcut"/>
            <!-- 返回通知 -->
            <aop:after-returning method="afterReturning" pointcut-ref="pointcut"/>
            <!-- 环绕通知 -->
            <aop:around method="around" pointcut-ref="pointcut"/>
            <!-- 异常通知 -->
            <aop:after-throwing method="afterException" pointcut-ref="pointcut"/>
            <!-- 后置通知 -->
            <aop:after method="after" pointcut-ref="pointcut"/>
        </aop:aspect>
    </aop:config>
</beans>

 

 UserDao.java

package com.xiaobiti.dao;

public interface UserDao {
    public boolean login(String username,String password);
    public void save();
    public void insert();
    public void delete();
    public void update();
    public void select();
}

UserDaoImpl.java

package com.xiaobiti.dao.impl;

import com.xiaobiti.dao.UserDao;
import com.xiaobiti.entity.User;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Resource(name = "user")
    private User user;
    @Override
    public boolean login(String username, String password) {
        if (username.equals("admin") && password.equals("1234")){
            return true;
        }
        return false;
    }

    @Override
    public void save() {
        System.out.println("执行dao中的方法");
        System.out.println(user);
    }

    @Override
    public void insert() {
        System.out.println("添加用户信息");
    }

    @Override
    public void delete() {
        System.out.println("删除用户信息");
    }

    @Override
    public void update() {
        System.out.println("修改用户信息");
    }

    @Override
    public void select() {
        System.out.println("查询用户信息");
    }
}

 

 xmlAdvice.java

package com.xiaobiti.demo;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

public class xmlAdvice {
    //前置通知
    public void before(JoinPoint joinpoint){
        System.out.println("这是前置通知...");
        System.out.println("目标类是:"+joinpoint.getTarget());
        System.out.println(",被织入增强的目标的方法:"+joinpoint.getSignature().getName());
    }
    //返回通知
    public void afterReturning(JoinPoint joinpoint){
        System.out.println("这是返回通知(不出现异常时候调用)...");
        System.out.println(",被织入增强的目标的方法:"+joinpoint.getSignature().getName());
    }
    //环绕通知
    public Object around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("这是环绕通知之前的部分...");
        //调用目标方法
        Object object = point.proceed();
        System.out.println("这是环绕通知之后的部分...");
        return object;
    }
    //异常通知
    public void afterException(JoinPoint joinpoint){
        System.out.println("这是异常通知...");
    }
    //后置通知
    public void after(JoinPoint joinpoint){
        System.out.println("这是后置通知...");
    }
}

运行测试代码:

public static void main(String[] args) {
        ApplicationContext  applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao =  applicationContext.getBean("userDao",UserDao.class);
        userDao.delete();
        System.out.println("======================================");
        userDao.insert();
        System.out.println("======================================");
        userDao.update();
        System.out.println("======================================");
        userDao.select();
    }

运行结果:

 

标签:userDao,Spring,void,System,AOP,println,public,out
From: https://www.cnblogs.com/xiaobiti/p/17282499.html

相关文章

  • Spring源码复习
    Bean的生命周期 ApplicationContextCentralinterfacetoprovideconfigurationforanapplication.*Thisisread-onlywhiletheapplicationisrunning,butmaybe*reloadediftheimplementationsupportsthis.**<p>AnApplicationContextprovides:*<ul......
  • Spring Initailizr(项目初始化向导)
    本地创建官网创建版在Spring官网https://start.spring.io/中选择此时这个项目以压缩包形式下载到本地文件中,然后解压,导入IDEA中阿里start创建如果国外的网址不能通过,将网址更换为http://start.aliyun.com更换版本号在pom.xml中更换maven依赖......
  • 【Spring】注解器
    applicationContext.xml1<?xmlversion="1.0"encoding="UTF-8"?>2<beansxmlns="http://www.springframework.org/schema/beans"3xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4xmln......
  • day01-SpringCloud基本介绍
    SpringCloud基本介绍SpringCloud官方文档1.提出问题先思考一个问题,没有微服务技术,是不是程序员就不能开发大型项目?是可以的,对大型项目进行模块划分,对各个模块进行实现。但模块之间更多地是以API调用完成,耦合度较高,不利于拓展和维护(在没有微服务技术时,很多大型项目就已经使......
  • SpringCloud之sleuth
    在大型分布式系统中,一次调用可能要经过很多不同的系统,调用很多服务。每个服务之间的调用会越来越复杂。会引入以下问题:如何快速发现问题?如何判断故障影响范围?如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划? 为了快速定位问题及时解决问题,引入了......
  • SpringBoot集成Activiti7-单独配置数据源
    框架:SpringBoot+Mybatis+Activiti7思路:单独给mybatis和activiti配置datasourceMybati配置单数据源方法单数据源只需要在yml中配置url:jdbc:mysql://localhost:3306/localtest?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatemen......
  • SpringCloud之zuul
    后台的微服务和客户端之间都有一个类似于酒店的前台,叫做网关。网关一般有以下作用:1、统一登录认证,由网关来进行身份认证,调用每个微服务时就不用各自认证了。2、解决跨越问题,微服务一般是部署在内网中。客户端调用时存在跨域。3、动态路由和负载均衡,根据请求路径动态分发到不同......
  • SpringBoot 服务接口限流-AOP令牌桶
    前言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的目的......
  • Springboot 系列 (27) - Springboot+HBase 大数据存储(五)| HBase REST 服务
    REST(RepresentationalStateTransfer)即表述性状态传递,是RoyFielding博士2000年在他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。在三种主流的Web服务实现方案中,与复杂的SOAP和XML-RPC相......
  • springboot集成mybatis-plus
    springboot项目先导入相关依赖mybatis-plus相关依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><dependency><gr......