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>
相关推荐
vipxieliang14 小时前
ValidX 正则表达式预编译优化:Pattern 复用策略
java·spring boot·后端
zjx238814 小时前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql
lhbweilai14 小时前
QT项目(串口助手)
开发语言·qt
真上帝的左手14 小时前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件
雪芽蓝域zzs14 小时前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis
eggwyw14 小时前
C++相交链表和反转链表详解
开发语言·c++
Wang's Blog14 小时前
Java 项目实战:交友项目 - FastDFS 工作原理
java·大数据·交友
Wang's Blog14 小时前
Java 项目实战:交友项目 - 保存访客记录
java·开发语言·交友
liangbo714 小时前
Spring系列01:IoC 与 DI 到底解决了什么
java·spring
江湖中的阿龙14 小时前
Oracle 紧急安全警报:Java 9.1 分漏洞 CVE-2026-91403,撤销对 eMudhra 风险证书的信任
java·安全·oracle