Spring_7_使用XML文件配置的方式实现AOP

接口类PersonService类与6相同。

1)实现类 PersonServiceBean

@Service
// 使用自动扫描的方式自动装配
public class PersonServiceBean implements PersonService {

	@Override
	public void save(String name) {
		// throw new RuntimeException("异常");
		System.out.println("调用save()方法");
	}

	@Override
	public void update(String name, Integer id) {
		System.out.println("调用update()方法");
	}

	@Override
	public String getPersonName(Integer id) {
		System.out.println("调用getPersonName()方法");
		return "xoxo";
	}
}

2)拦截类MyInterceptor:

/**
 * 当使用XML文件配置实现AOP时,拦截类是没有注解的普通类
 * @author A_shun
 */
@Component
// 使用自动扫描的方式自动装配
public class MyInterceptor {

	public void doAccessCheck() {
		System.out.println("前置通知");
	}

	public void doAfterReturning() {
		System.out.println("后置通知");
	}

	public void doAfter() {
		System.out.println("最后通知");
	}

	public void doAfterThrowing() {
		System.out.println("例外通知");
	}

	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
			System.out.println("进入方法");
			Object result = pjp.proceed();
			System.out.println("退出方法");
			return result;
	}
}

3)beans.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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

	<!-- 添加的自动扫描组件 -->
	<context:component-scan base-package="springDaoBean" />

	<!-- 添加拦截器 -->
	<aop:aspectj-autoproxy />

	<!-- 注解配置 -->
	<!-- <bean id="personService" class="springDaoBean.PersonServiceBean" /> -->

	<!-- 将MyInterceptor拦截类添加到Spring容器中管理 -->
	<bean id="aspetbean" class="springDaoBean.MyInterceptor" />
	<!-- 切面配置 -->
	<aop:config>
		<aop:aspect id="asp" ref="aspetbean">
			<!-- 设置切点,并设置拦截条件 -->
  <span style="white-space:pre">			</span>  <aop:pointcut id="mycut" expression="execution(* springDaoBean.PersonServiceBean.*(..))" />

			<!-- 有参数的拦截:(参数可以设置可以不设置)此处第一个参数为String类型,<span style="white-space:pre">							</span>     第二个为Integer类型,后面的参数可以不设置
			<aop:pointcut id="mycut"expression="execution<span style="white-space:pre">											</span>(* springDaoBean.PersonServiceBean.*(java.lang.String,java.lang.Integer,..))"/>-->

			<!-- 关于方法返回类型的拦截 :持方法只拦截返回值类型不为void的类;<span style="white-space:pre">								</span>     若  !void改为 void,则只拦截返回类型为void的方法
			<aop:pointcut id="mycut" expression=" execution(!void springDaoBean.PersonServiceBean.*(..))" />
			-->

			<!-- 设置拦截后具体执行的方法:pointcut-ref为关联到的切点;method为拦截类中具体执行的方法 -->
			<aop:before pointcut-ref="mycut method="doAccessCheck" />
			<aop:after-returning pointcut-ref="mycut" method="doAfterReturning" />
			<aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing" />
			<aop:after pointcut-ref="mycut" method="doAfter" />
		<aop:around pointcut-ref="mycut" method="doBasicProfiling" />
		</aop:aspect>
	</aop:config>
</beans>

4)主测试类springAopTest:

public class springAopTest {
	@Test
	public void instanceSpring() {

		AbstractApplicationContext ctx = new 		ClassPathXmlApplicationContext("springXml/beans.xml");

		PersonService personServiceBean = (PersonService)
ctx.getBean("personServiceBean");

		personServiceBean.save("oooo");
		System.out.println("==========================");

		personServiceBean.getPersonName(0);
		System.out.println("==========================");

		personServiceBean.update("xxxx", 2);

	}
}

Spring_7_使用XML文件配置的方式实现AOP

时间: 2024-08-29 06:00:39

Spring_7_使用XML文件配置的方式实现AOP的相关文章

spring,springmvc,mybatis基本整合(一)--xml文件配置方式(2)

spring,springmvc,mybatis基本整合(一)–xml文件配置方式(2)之mapper接口 一,整合结构 二,所需jar包 如上图. 三,整合配置 1,web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://j

strut2_struts.xml文件配置知识点汇集

1.Struts2的基本流程 Struts2框架大致分为三部分: .核心控制器StrutsPerpareAndExecuteFilter,Struts2框架提供 .业务控制器 ,用户自己实现 .用户实现的业务逻辑组建,用户自己实现 Struts2应用中的Action用于处理用户请求的Action实例,并不是用户自己实现业务控制器,而是Action代理.因为用户实现的业务控制器并没有ServletAPI耦合,显然无法处理用户请求.而Stuts2框架提供了系列拦截器,该拦截器负责将HttpServl

XML文件配置转化对象使用

我们在做移动开发的时候,会把一些变化的,或者固定的配置信息放到一个地方进行同意管理,存储. 起初的开发者,一般会直接放到一个类中,以静态的方式存放.比如请求地址url,数据库配置信息的数据库名,表名,字段名等.到了后来,需要配置的信息慢慢变的越来越多,那么就统一到一个专门的配置文件中放到资源里面,设定好数据存放规则,以一定的方式来读取配置信. 再到后来,又有升级的概念,如果需要动态的从服务器改变这些参数,只需要和服务器进行迭代升级,更新这个文件就可以进行动态的从服务器修改客户端的配置信息,那么这

idea的spring整合基于xml文件配置的mybatis报Invalid bound statement (not found): com.music.dao.MusicDao.findAll的问题

一. 题主当时就是自己尝试整合spring和mybatis的时候遇到了这个问题,当时题主只看到了用注解的方式配置的dao层,题主用的是xml文件配置的形式, 而且坑爹的是题主的两个文件的路径写的也不一致,就导致直接用<property name="basePackage" value="com.music.dao"></property> 导致绑定异常 后来在网上查到了解决的办法 ,就是如果路径一致,(如果一致你也就不会来看到本文了), 两个

通过编码和xml文件两种方式实现tween动画

tween有四种动画效果:alpha(透明).rotate(旋转), translate(移动),scale(缩放); 可以通过硬编码和xml文件这两种方式来实现. xml实现: 第一步:在项目的res文件下面新建一个文件夹名字是anim(必须) 第二步:在anim文件夹下面新建新的xml文件,在xml文件中具体设置动画效果 第三步:在Activity中使用 AnimationUtils.loadAnimation(MainActivity.this,R.anim.xx);来获取. 1.alph

Maven管理SSM框架的pom.xml文件配置(自动下载所依赖的jar包)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

web.xml 文件配置01

web.xml 文件配置01 前言:一般的web工程中都会用到web.xml,方便开发web工程.web.xml主要用来配置Filter.Listener.Servlet等.但是要说明的是web.xml并不是必须的,一个web工程可以没有web.xml文件. 1.定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文 件的字符编码.web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

Maven的项目pom.xml文件配置标签列表

maven项目的pom.xml文件配置项目众多,以下是可以配置的标签 <groupId>组织id <artifactId>构件id <version>版本号 <packaging>包类型 <name>名称 <url> ??? <description>描述文本 <developers>开发者信息 <properties>属性配置信息 <build>构件配置信息 <dependenc