SPRING AOP 实际是将原对象引用为一个代理,此代理由proxyfactorybean或spring的自动代理类BeanNameAutoProxyCreator创建,代理实例包含被代理的对象,同时包含切入点和通知。当调用原对象是时,实际上调用的是代理,同时调用代理的通知方法,来达到AOP的目的。
下面是一个例子先看applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myInterceptor" class="com.aop.interceptors.MyInterceptor"></bean>
<bean id="myService" class="com.aop.service.impl.MyServiceImpl"></bean>
<bean id="myPointCut" class="org.springframework.aop.aspectj.AspectJExpressionPointcut">
<property name="expression" value="execution(* com.aop.service.*Service.*(..))"></property>
</bean>
<bean id="expressAdvice" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="myInterceptor"></property>
<property name="pointcut" ref="myPointCut"></property>
</bean>
<bean id="login" class="com.aop.managebeans.LoginBean">
<property name="myService" ref="myService"></property>
</bean>
<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames" value="expressAdvice">
</property>
<property name="beanNames"><list><value>myService</value></list></property>
</bean>
</beans>
其次是环绕通知的实现MyInterceptor.java
package com.aop.interceptors;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyInterceptor implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("before invoke");
Object obj = arg0.proceed();
System.out.println("after invoke");
return obj;
}
}
以下是服务类,即被代理的对象MyServiceImpl.java
package com.aop.service.impl;
import com.aop.service.MyService;
public class MyServiceImpl implements MyService {
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
return "hello"+name;
}
}
当MyServiceImpl被调用时。执行通知MyInterceptor的代码
package com.aop.managebeans;
import javax.faces.bean.ManagedBean;
import com.aop.service.MyService;
public class LoginBean {
private String name;
private String passWord;
private MyService myService;
/**
* @param myService the myService to set
*/
public void setMyService(MyService myService) {
this.myService = myService;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the passWord
*/
public String getPassWord() {
return passWord;
}
/**
* @param passWord the passWord to set
*/
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String loginUser(){
myService.sayHello(name);
if(name.equals(passWord)){
return "success";
}
return "error";
}
}
附件为源代码。为一个JSF2的WEB工程。
分享到:
相关推荐
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、...通过实践这些示例,可以更好地理解Spring AOP的精髓,从而在实际项目中灵活运用。
首先,我们需要理解Spring AOP的基础概念。AOP的核心是切点(Pointcut),它定义了关注点在何处应用。在Spring中,我们通常使用表达式或者注解来定义切点。例如,我们可以使用`@Before`、`@After`、`@Around`、`@...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的...通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大的工具,优化我们的应用程序。
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
下面将详细介绍Spring AOP的注解方式和XML配置方式。 ### 注解方式 #### 1. 定义切面(Aspect) 在Spring AOP中,切面是包含多个通知(advisors)的类。使用`@Aspect`注解标记切面类,例如: ```java @Aspect ...
在深入理解 Spring AOP 的源码时,需要熟悉 Spring IoC 的工作原理,以及 AOP 相关的概念,如切点表达式、通知类型等。了解这些基础知识可以帮助我们更好地掌握 Spring AOP 的实现细节。在分析源码时,可以参考作者...
首先,我们来详细讲解通过注解实现Spring AOP。在Spring中,我们可以使用`@Aspect`注解来定义一个切面,这个切面包含了多个通知(advice),即拦截器。例如: ```java @Aspect @Component public class ...
Spring AOP(面向切面编程)是...通过深入理解和实践Spring AOP,开发者可以更高效地组织代码,提高代码的可读性和可维护性,同时减少重复的工作。在实际开发中,合理利用AOP可以有效提升软件系统的灵活性和扩展性。
Spring AOP支持多种方式来定义切入点,包括但不限于方法名、类名、注解等。 5. **引入(Introduction)**:允许向被通知对象添加新的接口实现或者新的方法。例如,可以使用引入让任何对象实现`IsModified`接口,...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。
在实际应用中,这三个jar包的协同工作使得Spring AOP能够实现以下功能: - **切点定义**:使用AspectJ的切点表达式(例如`execution(* com.example.service.*.*(..))`),定义需要增强的方法或类。 - **通知类型**...
在本文中,我们将深入探讨Spring AOP的运用,并结合源码分析其工作原理。 首先,了解AOP的基本概念: 1. 切面(Aspect):切面是关注点的模块化,这些关注点通常是跨越多个对象的横切关注点,例如事务管理、日志...
通过深入理解并熟练运用Spring AOP,开发者可以编写更加模块化、可维护的代码,减少重复的工作,并提高系统的整体设计质量。在实际项目中,结合源码阅读和相关工具,能进一步提升对Spring AOP的掌握和运用水平。
SpringAOP(面向切面编程)是Spring框架的一个关键组件,它允许开发者通过定义切面来统一处理横切关注点,比如日志、安全等。它与AspectJ一样,目标是为了处理横切业务,但实现方式有所区别。AspectJ是一种更全面的AOP...
5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...
Spring AOP,全称Aspect-Oriented Programming...同时,了解动态代理机制有助于我们理解Spring AOP的工作原理。在实际项目中,Spring AOP不仅可以简化代码,还能帮助我们更好地遵循单一职责原则,使得代码更加模块化。
Spring AOP的实现基于动态代理,有两种代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理主要针对实现了接口的类,而CGLIB代理则针对未实现接口的类,Spring会根据目标对象是否实现了接口来选择合适的代理方式。 ...
在提供的四个jar包中,每个都有其特定的功能和作用,对于理解Spring AOP的工作原理至关重要。 1. **aspectj-1.7.3.jar**:这是AspectJ库的一部分,AspectJ是一个全面的面向切面编程(AOP)的Java语言扩展。在Spring ...
综上所述,通过理解Spring AOP的配置和动态代理机制,我们可以灵活地在项目中添加横切关注点,提升代码的模块化和可维护性。在实际开发中,结合使用XML配置、注解配置以及适当的动态代理策略,可以使AOP功能更好地...