spring中的aop初步认识

本文重要介绍spring的AOP编程的主要配置.

1.定义接口文件TestServiceInter.java和TestServiceInter1.java文件

package com.aoptest;

public interface TestServiceInter {
		 public void sayHello();
}
package com.aoptest;

public interface TestServiceInter1 {
		 public void sayBye();
}

2.创建接口首先类TestService.java

package com.aoptest;

public class TestService implements TestServiceInter,TestServiceInter1 {
	private String name;

	@Override
	public void sayHello() {
		System.out.println(name+",Hello!!");
	}
	@Override
	public void sayBye() {
		System.out.println(name+",Bye!!");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

3.编写前置通知类MyMethodBeforeAdvice.java实现spring的MethodBeforeAdvice.java接口

package com.aoptest;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class MyMethodBeforeAdvice implements MethodBeforeAdvice {

	@Override
	public void before(Method method, Object[] arg1, Object arg2)throws Throwable {
			System.out.println("logging……………"+method.getName());
	}
}

4.配置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:tx="http://www.springframework.org/schema/tx"
		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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 配置被代理的对象 -->
<bean id="testService" class="com.aoptest.TestService" >
		<property name="name" >
				<value>siege</value>
		</property>
</bean>
<!-- 配置前置通知 -->
<bean id="myMethodBeforeAdvice"  class="com.aoptest.MyMethodBeforeAdvice">
</bean>
<!-- 配置代理对象 -->
<bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 配置代理接口集 -->
		<property name="proxyInterfaces">
				<list>
						<value>com.aoptest.TestServiceInter</value>
						<value>com.aoptest.TestServiceInter1</value>
				</list>
		</property>
<!--把通知织入代理对象  -->
		<property name="interceptorNames"  value="myMethodBeforeAdvice"></property>
<!-- 配置被代理对象 -->
		<property name="target"  ref="testService"></property>
</bean>
</beans>

5.编写测试类App.java

package com.aoptest;

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

public class App {

	public static void main(String[] args) {
		ApplicationContext ac=(ApplicationContext) new ClassPathXmlApplicationContext("com/aoptest/beans.xml");
		TestServiceInter test=(TestServiceInter) ac.getBean("proxyFactoryBean");//直接获取代理对象
		test.sayHello();
		((TestServiceInter1)test).sayBye();
	}

}

测试结果如下:

logging……………sayHello
siege,Hello!!
logging……………sayBye
siege,Bye!!

其详细步骤如下:

1.定义接口

2.编写被代理对象(即目标对象)

3.编写通知对象(前置通知目标方法)

4.配置beans.xml

  • 配置被代理对象
  • 配置通知
  • 配置代理对象:

① 配置代理接口集

②把通知织入代理对象

③配置被代理对象

  • 编写测试类

AOP相关的术语概念:

1.切面:要实现的交叉功能,由通知实现

2.通知:切面的实际实现

3.连接点:插入切面的地点,指方法调用

4.目标对象:被代理的对象

5.代理:即代理对象

6.织入(过程):调用代理对象变发生织入

7.切入点:当织入发生时,连接点变成切入点

时间: 2024-10-26 13:03:44

spring中的aop初步认识的相关文章

spring中的aop注解(整合junit测试)

使用spring中的aop前先来了解一下spring中aop中的一些名词 Joimpoint(连接点):目标对象中,所有可能增强的方法 PointCut(切入点):目标对象,已经增强的方法 Advice(通知/增强):增强的代码 Target(目标对象):被代理对象 Weaving(织入):将通知应用到切入点的过程 Proxy(代理):将通知织入到目标对象之后,形成代理对象 aspect(切面):切入点+通知 一:不使用spring的aop注解 以javaEE中的service层为例 UserS

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob

深入分析JavaWeb Item54 -- Spring中的AOP面向切面编程2

一.在Advice方法中获取目标方法的参数 1.获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Object getTarget:返回被织入增强处理的目标对象 Object getThis:返

Spring中的AOP

在上一篇博客中,我们讲了Spring的IOC,以下,我们继续解说Spring的还有一个核心AOP AOP: 在软件业,AOP为Aspect Oriented Programming的缩写.意为:面向切面编程,通过预编译方式和执行期动态代理实现程序功能的统一维护的一种技术. AOP也是Action Oriented Programming 的缩写,意为:面向切面编程,是函数式编程的一种衍生范型.AOP在其它领域也有其它含义. AOP的具体解释: 还是老规矩,站在巨人的肩膀上,看看其它人对AOP的理

spring中的AOP 以及各种通知

理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类有100多个方法都需要判断是不是要开事务,那么方法调用那里会相当麻烦. spring中的AOP很好地解决了这个问题,通过 execution表达式 指定哪些包中的那些类 哪些方法 用到事务 execution(public * *(..))  所有的公共方法 execution(* set*(..))  以set开头的任意方法 execution(* com.xyz.service.AccountSer

Java——面向切面编程,Spring中的AOP编程

面向切面编程 AOP思想:将横向重复代码,纵向抽取出来 AOP体现--Filter AOP体现--拦截器 AOP体现--动态代理 Spring中实现AOP思想 原理:Spring可以为容器中管理的对象生成代理对象 代理分为动态代理和cglib代理: 动态代理(优先) 被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术,换句话说,就是代理对象和被代理要实现同一接口 cglib代理 第三方代理技术,cglib代理,可以对任何类生成代理,代理的原理是对目标对象进行继承代理,

2018.12.24 Spring中的aop演示

Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求.而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码. 4.spring中的aop演示 4.1步骤: 1.导包(4+2+2+2+1) 基础包+日志包+aop.aspects+test+weaver+aopalliance 下面两个是spring需要的第三方aop包 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar com.springsource.or

Spring中的AOP注解方式和配置方式

今天学习了下spring中的切面编程:结合之前看过的视频.整合一下思路: 基本类: 接口: public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } 接口的实现: import org.springframework.stereotype.Component; @Component("ar

Spring(二) Spring中的AOP和属性注入

一.AOP(Aspect Oriented Programing)面向切面编程 AOP的终极目标:让我们可以专心做事 下面通过一个例子来介绍AOP的具体使用 案例的要求:使用AOP实现日志记录系统 ,  核心模块  和    增强  单独  开发  ,运行时再组装 首先定义接口和方法 接口和实现类中的代码,我放在一起了,应该比较简单 package demo04.dao; /** * Created by mycom on 2018/3/5. */ public interface IHello