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>
原文地址:https://blog.csdn.net/m0_72407563/article/details/144292654
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!