SpringMVC ,ioc和aop

IOC和AOP

IOC

控制反转,将应用程序的控制权交给spring容器管理,而不是应用程序本身

复制代码
1.创建一个mapper,测试用, 就写个普通方法
public class UserMapper {
    public void addUser(){
        System.out.println("dao层新增");
    }
}
2.di.xml,将UserMapper注册入spring的bean
<bean id="userMapper" class="mapper.UserMapper"></bean>
3.测试类,从spring的容器里获取对象的实例化权限
public class Test1 {
    @Test
    public void test01() {
        UserMapper userMapper = (UserMapper) context.getBean("userMapper");
        userMapper.addUser();
    
    }
}

AOP

1.创建操作切面类

2.在spring.xml里配置切面和切点

复制代码
public class LoggerAdvice {
    //创建日志对象
    Logger logger = Logger.getLogger(LoggerAdvice.class);
    //前置增强
    public void before(JoinPoint jp){
        logger.info("前置增强,调用"+jp.getTarget()+"的"+jp.getSignature().getName()
        +"参数是"+ Arrays.toString(jp.getArgs()));
    }
    //后置增强
    public void after(JoinPoint jp,Object ex){
        logger.info("后置增强,调用"+jp.getTarget()+"的"+jp.getSignature().getName()
                +"参数是"+ Arrays.toString(jp.getArgs())+"返回值:"+ex);
    }
    //异常增强
    public void afterThrowing(JoinPoint jp,Exception ex){
        logger.info("异常增强,调用"+jp.getTarget()+"的"+jp.getSignature().getName()
                +"参数是"+ Arrays.toString(jp.getArgs())+"异常:"+ex.getMessage());
    }
    //环绕增强
    public void around(ProceedingJoinPoint pj){
        try {
            logger.info("前置增强,调用"+pj.getTarget()+"的"+pj.getSignature().getName()
                +"参数是"+ Arrays.toString(pj.getArgs()));
            logger.info("后置增强,调用"+pj.getTarget()+"的"+pj.getSignature().getName()
                    +"参数是"+ Arrays.toString(pj.getArgs())+"返回值:"+pj.proceed());

        } catch (Throwable e) {
            logger.info("异常增强,调用"+pj.getTarget()+"的"+pj.getSignature().getName()
                    +"参数是"+ Arrays.toString(pj.getArgs())+"异常:"+e.getMessage());
            e.printStackTrace();
        }
    }
}

定义切面和切点

在com.j4061.springmybatis.service包及其子包下的所有公共方法执行前后添加日志记录功能

复制代码
<!-- 1.这里定义了一个名为loggerAdvice的Bean,其类型为com.j4061.springmybatis.util.LoggerAdvice -->
<bean id="loggerAdvice" class="com.j4061.springmybatis.util.LoggerAdvice"></bean>
    <aop:config>
    <!-- 2.定义了切入点表达式,表示匹配com.j4061.springmybatis.service包及其子包下所有公共方法的执行。这里的public*表示任何返回类型的公共方法,*.*表示任何类中的任何方法,(..)表示接受任意数量和类型的参数 -->
    <aop:pointcut id="loggerOpintCut" expression="execution(public * com.j4061.springmybatis.service..*.*(..))"/>
        <aop:aspect ref="loggerAdvice">
        <!-- 前置增强 -->
           <aop:before method="before" pointcut-ref="loggerOpintCut"></aop:before>
           <!-- 后置增强 -->
           <aop:after-returning returning="ex" method="after" pointcut-ref="loggerOpintCut"></aop:after-returning>
           <!-- 异常增强 -->
           <aop:after-throwing method="afterThrowing" throwing="ex" pointcut-ref="loggerOpintCut"></aop:after-throwing>
           <!-- 环绕增强 -->
            <aop:around method="around" pointcut-ref="loggerOpintCut"></aop:around>
        </aop:aspect>
    </aop:config>
相关推荐
DuelCode16 分钟前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
浪裡遊16 分钟前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
优创学社220 分钟前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理27 分钟前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码29 分钟前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
Hello.Reader1 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
lzb_kkk1 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
YuTaoShao1 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
好开心啊没烦恼1 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
Dcs2 小时前
超强推理不止“大”——手把手教你部署 Mistral Small 3.2 24B 大模型
java