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>
相关推荐
杨DaB6 分钟前
【SpringMVC】MVC中Controller的配置 、RestFul的使用、页面重定向和转发
java·笔记·后端·学习·spring·mvc·restful
linyb极客之路10 分钟前
干货来袭!5 分钟学会快速实现责任链,效率直接拉满!
java
创码小奇客14 分钟前
保姆级 Talos 超参数优化实战指南:从入门到封神
java·后端·架构
青云交22 分钟前
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与误报率降低策略(369)
java·大数据·入侵检测·智能安防·多源数据融合·误报率降低·视频语义理解
望获linux29 分钟前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
我会冲击波33 分钟前
告别手写注释!变量命名、注释IDEA插件更新了,AI帮你搞定一切代码注释
java·intellij idea
全栈小538 分钟前
【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
数据库·sql server
BUG创建者1 小时前
openlayer根据不同的状态显示不同的图层颜色
android·java·javascript
JohnYan1 小时前
工作笔记 - 一种业务信息汇报机制的设计和实现
数据库·后端·postgresql
羊锦磊1 小时前
[java 常用类API] 新手小白的编程字典
java