SpringMVC用XML方式实现AOP

1 篇文章 0 订阅
1 篇文章 0 订阅

1.首先创建web工程,之后导入Spring jar包,目录如下

在这里插入图片描述
在这里插入图片描述

2.文件代码

2.1AfterAdvice

package com.niit.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
/*
 * 后置通知
 * havingClass方法执行之后才执行。
 * 输出日记
 * */
public class AfterAdvice implements AfterReturningAdvice {

	@Override
	public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("后置拦截:下课之后写作业");

	}

}

2.2BeforeAdvice

package com.niit.aop;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class BeforeAdvice implements MethodBeforeAdvice {
/*
 * 前置通知
 * 在havingClass切入点方法执行之前通知
 * 用于验证用户的合法性。/判断一些数据是否存在。适用于检索。注册判断用户名是否存在。
 * */
	@Override
	public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("前面拦截:上课之前要点名!在调用havingClass方法之前调用");

	}

}

2.3StudentIntercepter

package com.niit.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class StudentIntercepter implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation method) throws Throwable {
		// TODO Auto-generated method stub
		if(method.getArguments().length>0) {
			String name=(String)method.getArguments()[0];
			if("hmq".equals(name)){
				System.out.println("中间拦截:你是hmq");
			}
			else {
				System.out.println("中间拦截:你是学生");
			}
			method.proceed();
		}
		return null;
	}

}

2.4StudentIF

package com.niit.logic;

public interface StudentIF {
	public void havingClass(String name);
	public void dohomework(String name);
	
}

2.5Student

package com.niit.logic;

public class Student implements StudentIF {

	//作为aop的目标方法
public void havingClass(String name) {
	System.out.println("aop的目标方法");
	System.out.println(name+"正在上课");
}
public void dohomework(String name) {
	System.out.println(name+"正在写作业");
}
}

2.6StudentLogic

package com.niit.logic;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StudentLogic {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentIF s=(StudentIF)context.getBean("student");
		s.havingClass("hmq");
		System.out.println("---------------");
		s.dohomework("hmq");
		System.out.println("---------------");
		s.havingClass("abc");
		System.out.println("---------------");
		s.dohomework("abc");
		System.out.println("---------------");
		
	}

}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200415161316110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzc0NDg4Mw==,size_16,color_FFFFFF,t_70)

2.7applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
    http://www.springframework.org/schema/cache
    http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util.xsd">
   
    <!-- 自动扫描web包,将带有注解的类 纳入spring容器管理 -->
    <!-- <context:component-scan base-package="com.niit.beans">
    </context:component-scan> -->
    <!-- 定义通知 -->
    <bean id="BeforeAdvice" class="com.niit.aop.BeforeAdvice"></bean>
     <bean id="AfterAdvice" class="com.niit.aop.AfterAdvice"></bean>
  
    <!-- 定义拦截器 -->
    <bean id="StudentIntercepter" class="com.niit.aop.StudentIntercepter"> </bean>
   <!-- 定义目标 -->
<bean id="target" class="com.niit.logic.Student"></bean>
<!-- 切入点 哪些方法会被aop影响 可选 -->
<bean id="pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<!-- 模式 -->
<property name="pattern" value=".*dohomework.*" >
</property>

</bean>
<!-- 通知器advisor 连接通知和切入点 可选-->
<bean id="advisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="BeforeAdvice"/>
<property name="pointcut" ref="pointcut"/>
</bean> 
<!-- 定义代理 -->
<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 注入目标 -->
<property name="target" ref="target"></property>
<!-- 设置拦截器 -->
<property name="interceptorNames">
<list>
<value>BeforeAdvice</value>
<value>AfterAdvice</value>
<value>StudentIntercepter</value>
</list>
</property>
<!-- 定义代理接口 -->
<property name="proxyInterfaces" value="com.niit.logic.StudentIF"></property>

</bean>

   

    
</beans>

2.8SpringMVC.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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">
        
        <!-- 包扫描:扫描注解所在的包controller类所在的包 -->
        <context:component-scan base-package="com.niit.controller"></context:component-scan>
         <context:component-scan base-package="com.niit.service" />
          <context:component-scan base-package="com.niit.dao" />
        <!-- 开启注解驱动AnnotationHandlerMapping -->
        <mvc:annotation-driven/>
    
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--SimpleMappingExceptionResolver(异常类与 View 的对应关系) -->
    <bean
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <!-- 定义默认的异常处理页面,当该异常类型注册时使用 -->
        <property name="defaultErrorView" value="error"></property>
        <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
        <property name="exceptionAttribute" value="ex"></property>
        <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页名作为值 -->
        <property name="exceptionMappings">
            <props>
                <prop key="exception.MyException">my-error</prop>
                <prop key="java.sql.SQLException">sql-error</prop>
                <prop key="exception.KeyWordNotFoundException">my-error</prop>
                <!-- 在这里还可以继续扩展对不同异常类型的处理 -->
            </props>
        </property>
    </bean>
     <!--托管MyExceptionHandler-->
   <!--<bean class="com.niit.exception.MyExceptionHandler"/> -->

 
</beans>

3.运行

3.1

在这里插入图片描述

4效果图

4.1

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值