使用Spring自动生成代理类,spring利用的是动态代理机制
接口
Java代码
public interface UserDao {
void addUser();
void deleteUser();
}
两个实现:
Java代码
public class UserDaoMySqlImpl implements UserDao {
@Override
public void addUser() {
System.out.println("UserDaoMySqlImpl.addUser()");
}
@Override
public void deleteUser() {
System.out.println("UserDaoMySqlImpl.deleteUser()");
}
}
public class UserDaoOracleImpl implements UserDao {
@Override
public void addUser() {
System.out.println("UserDaoOracleImpl.addUser()");
}
@Override
public void deleteUser() {
System.out.println("UserDaoOracleImpl.deleteUser()");
}
}
Device
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class UserDaoBeforeAdvice implements MethodBeforeAdvice {
@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("UserDaoBeforeAdvice.before()");
}
}
spring的配置文件
Xml代码
<!-- 配置实现类的bean,可以把所有的实现类都写上 -->
<bean id="userdao" class="com.dowebber.spring.aop.UserDaoMySqlImpl"></bean>
<!--配置Advice的bean -->
<bean id="beforeadvice" class="com.dowebber.spring.aop.UserDaoBeforeAdvice"></bean>
<!--配置spring自动生成代理对象所需要的一些参数 -->
<bean id="userdaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces" value="com.dowebber.spring.aop.UserDao"/>
<property name="target">
<ref bean="userdao"/>
</property>
<property name="interceptorNames">
<list>
<value>beforeadvice</value>
</list>
</property>
</bean>
测试类:
Java代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestUserDaoBeforeDevice {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("com/dowebber/spring/aop/spring.xml");
UserDao dao = (UserDao)context.getBean("userdaoproxy");
dao.addUser();
}
}
分享到:
相关推荐
Spring AOP中的MethodBeforeAdvice是Spring框架提供的面向切面编程(AOP)的重要组成部分,用于在目标对象的方法执行之前执行一段代码。在AOP中,可以通过定义所谓的“advice”来插入横切关注点(cross-cutting ...
该jar文件包含了Spring AOP的核心类和接口,如`org.springframework.aop.*`包下的`AspectJExpressionPointcut`、`MethodBeforeAdvice`、`AfterReturningAdvice`等。 3. spring-aspects-4.1.6.RELEASE.jar:这个jar...
这些通知通过`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`等接口实现。 三、连接点(Join Point) 连接点是程序执行中的一个特定点,例如方法的调用。在Spring ...
3. 配置通知:通知是实际执行的操作,可以是Spring的`MethodBeforeAdvice`、`AfterReturningAdvice`等接口的实现。在配置文件中,我们创建一个bean,实现相应的接口,并设置其属性和方法。 四、实例解析 以下是一个...
本文将深入探讨Spring AOP的实现,包括MethodBeforeAdvice、AfterReturningAdvice以及MethodInterceptor等关键概念。 一、AOP基础知识 AOP的核心思想是横切关注点,即那些与业务逻辑不直接相关的,但需要在多个...
在Spring AOP中,如果要实现前置通知,我们需要实现`MethodBeforeAdvice`接口,它继承自`Advice`接口。当配置了此类通知后,Spring会在每次目标方法执行前调用这个通知,从而可以实现如权限检查、日志记录等功能。 ...
比如,`org.aopalliance.intercept.MethodInterceptor`接口定义了拦截器的接口,Spring AOP的`MethodBeforeAdvice`、`AfterReturningAdvice`等通知类型都实现了这个接口。 了解这些jar包的作用后,我们可以看到...
你可以通过实现`org.springframework.aop.MethodBeforeAdvice`接口来创建Before Advice。该接口只有一个方法`before()`,它接受三个参数:`Method`对象代表即将执行的方法,`Object[] args`是方法的参数,`Object ...
`org.aopalliance.intercept.MethodInterceptor`接口定义了拦截器的行为,而`org.springframework.aop.MethodBeforeAdvice`等类则是具体的通知实现。`org.springframework.aop.aspectj.AspectJExpressionPointcut`类...
它是一个实现了`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`或`org.springframework.aop.ThrowsAdvice`等接口的对象,可以在方法调用前后执行自定义逻辑。...
### Spring之AOP介绍 #### 一、AOP概述 面向方面编程(Aspect-Oriented Programming,简称AOP)作为一种编程范式,旨在通过模块化的方式处理横切关注点(Cross-cutting Concerns)。传统的面向对象编程(OOP)虽然...
<bean class="org.springframework.aop.aspectj.MethodBeforeAdvice"> ``` 这里的`loggingAdvisor`定义了一个基于正则表达式的切点,匹配所有以`com.example.*Service.*`开头的方法,并在这些方法调用...
这个库包含了创建代理对象和执行切面逻辑的类,如AspectJExpressionPointcut和MethodBeforeAdvice等,这些都是Spring AOP的基础。 cglib-nodep-2.1_3.jar是代码生成库,当无法使用Java动态代理(例如,目标对象没有...
6. **MethodBeforeAdvice**、**AfterReturningAdvice**等:这些是不同类型的通知接口,定义了在方法执行前、后或抛出异常时执行的通知行为。 在源代码中,你可以看到Spring如何通过反射和动态代理来实现AOP的功能。...
- **前置通知**:`org.springframework.aop.MethodBeforeAdvice` 是一个接口,定义了在目标方法执行之前执行的操作。 - **后置通知**:`org.springframework.aop.AfterReturningAdvice` 是一个接口,定义了在目标...
例如,对于`@Before`通知,Spring会调用`MethodBeforeAdvice`接口的方法;对于`@Around`通知,Spring会调用`ProceedingJoinPoint`的`proceed()`方法。 3. Spring AOP的代理机制分为JDK动态代理和CGLIB代理。如果目标...
开发者可以通过实现org.springframework.aop.MethodBeforeAdvice接口来实现Before Advice的逻辑。在before方法中,可以取得指定方法的Method实例、参数列表和目标对象,在before方法执行完后,目标对象上的方法将会...
通知可以自定义一个类,实现`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`或`org.aspectj.lang.ProceedingJoinPoint`接口,分别对应不同的通知类型。 2. **创建...