1、Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(创建推荐尽量使用JDK动态代理)如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有目标类型实现的接口都被代理。若改目标对象没有实现任何接口,则创建一个CGLIB代理。
2、Spring2.0中的Pointcut定义?
Pointcut是JoinPoint的集合,它是程序中需要注入Advice的位置的集合,在Spring2.0中,Pointcut的定义包括两个部分:Pointcut表达式(expression)和Pointcut签名(signature)。
3、基于XML Schema的前置通知
1、Java代码如下:
package com.zuxia.advice;
import org.aspectj.lang.JoinPoint;
public class FrontLogAdvice {
//JoinPoint(连接点)连接点是应用程序执行过程中插入Aspect的地点,这个地点可以方法调用,
//异常抛出等时刻
public void printLog(JoinPoint joinPoint) {
System.out.print("*************");
System.out.print(joinPoint.getTarget().toString());
System.out.print(" ");
System.out.print(joinPoint.getSignature().getName());
System.out.print("(");
Object[] args =joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.print(args[i]);
if(i<args.length - 1){
System.out.print(",");
}
}
System.out.print(")");
System.out.println(" *************");
}
}
2、其次在applicationContext.xml核心文件配置如下:
<!-- 配置方法前置通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
<bean id="frontLogAdvice" class="com.zuxia.advice.FrontLogAdvice"></bean>
<aop:config>
<!-- 配置一个切面 -->
<aop:aspect id="frontLog" ref="frontLogAdvice">
<!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
<!-- 配置一个前置通知-->
<aop:before method="printLog" pointcut-ref="serviceMethod"/>
</aop:aspect>
</aop:config>
4、基于XML Schema的后置通知:
1、Java代码如下:
package com.zuxia.advice;
import org.aspectj.lang.JoinPoint;
public class AfterLogAdvice {
//JoinPoint(连接点)连接点是应用程序执行过程中插入Aspect的地点,这个地点可以方法调用,
//异常抛出等时刻
public void printAfterLog(JoinPoint joinPoint) {
System.out.print("*************");
System.out.print(joinPoint.getTarget().toString());
System.out.print(" ");
System.out.print(joinPoint.getSignature().getName());
System.out.print("(");
Object[] args =joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.print(args[i]);
if(i<args.length - 1){
System.out.print(",");
}
}
System.out.print(")");
System.out.println(" *************");
}
}
2、其次在applicationContext.xml核心文件配置如下:
<!-- 配置方法后置通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
<bean id="afterLogAdvice" class="com.zuxia.advice.AfterLogAdvice"></bean>
<aop:config>
<!-- 配置一个切面 -->
<aop:aspect id="afterLog" ref="AfterLogAdvice">
<!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
<!-- 配置一个后置通知-->
<aop:after method="printAfterLog" pointcut-ref="serviceMethod"/>
</aop:aspect>
</aop:config>
5、基于XML Schema的环绕通知
1、Java代码如下:
package com.zuxia.advice;
import org.aspectj.lang.ProceedingJoinPoint;
public class ProceedAdvice {
public void printProceedLog(ProceedingJoinPoint joinpoint){
System.out.print("***************** ");
System.out.print(joinpoint.getTarget().toString());
System.out.print(" ");
System.out.print(joinpoint.getSignature().getName());
System.out.print("(");
Object[] args = joinpoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.print(args[i]);
if (i < args.length - 1) {
System.out.print(", ");
}
}
System.out.print(")");
System.out.println(" ***************** begin");
try {
joinpoint.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.print("***************** ");
System.out.print(joinpoint.getTarget().toString());
System.out.print(" ");
System.out.print(joinpoint.getSignature().getName());
System.out.print("(");
for (int i = 0; i < args.length; i++) {
System.out.print(args[i]);
if (i < args.length - 1) {
System.out.print(", ");
}
}
System.out.print(")");
System.out.println(" ***************** end");
}
}
2、applicationContext.xml核心文件配置如下:
<!-- 配置方法环绕型通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
<bean id="proceedAdvice" class="com.zuxia.advice.ProceedAdvice"></bean>
<aop:config>
<!-- 配置一个切面 -->
<aop:aspect id="proceedlog" ref="proceedAdvice">
<!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
<!-- 配置一个环绕型通知-->
<aop:after method="printProceedLog" pointcut-ref="serviceMethod"/>
</aop:aspect>
</aop:config>
6、基于XML Schema的异常通知
1、Java代码如下:
package com.zuxia.advice;
import org.aspectj.lang.JoinPoint;
public class ExceptionAdvice {
public void printExceptionLog(JoinPoint joinpoint){//不推荐使用Throwable对象,没必要打印堆栈
System.out.print("***************** ");
System.out.print(joinpoint.getTarget().toString());
System.out.print(" ");
System.out.print(joinpoint.getSignature().getName());
System.out.print("(");
Object[] args = joinpoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.print(args[i]);
if (i < args.length - 1) {
System.out.print(", ");
}
}
System.out.print(")");
System.out.println(" *****************");
//打印异常堆栈信息
//System.out.println(throwable.getStackTrace());
}
}
2、applicationContext.xml核心文件配置如下:
<!-- 配置方法异常通知的第二中方式,推荐采用这种方式,因为它不会和事务配置冲突(开始) -->
<bean id="exceptionAdvice" class="com.zuxia.advice.ExceptionAdvice"></bean>
<aop:config>
<!-- 配置一个切面 -->
<aop:aspect id="exceptionlog" ref="exceptionAdvice">
<!-- 配置切点,指定将通知注入到哪些类的哪些方法上 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.zuxia.service.*.*(..))"/>
<!-- 配置一个异常通知-->
<aop:after method="printExceptionLog" pointcut-ref="serviceMethod"/>
</aop:aspect>
</aop:config>
分享到:
相关推荐
`applicationContext.xml`是Spring框架的核心配置文件之一,通过合理的配置可以极大地简化开发工作,提高代码的可维护性和扩展性。对于SSH框架而言,`applicationContext.xml`不仅是Spring容器的基础配置文件,也是...
在IT行业中,尤其是在Java Web开发领域,`applicationContext.xml`、`db.properties`、`log4j.properties`以及`spring-mvc.xml`等文件是非常关键的配置文件,它们各自负责不同的功能,对于一个完整的应用程序来说不...
在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...
《ApplicationContext.xml——Spring框架的核心配置文件详解》 在Java开发领域,Spring框架是不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented ...
在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了应用上下文,即Spring容器,用来管理所有bean的创建、初始化、依赖注入以及生命周期。这个文件使用XML语法,遵循特定的命名空间和schema,以...
3. **applicationContext.xml**:这是Spring的上下文配置文件,主要管理服务层(Service)和数据访问层(DAO)的Bean。包括Bean的定义、依赖注入(DI)、事务管理、AOP(面向切面编程)等配置。 - Bean定义:使用`...
2. **ApplicationContext.xml**:这是Spring应用上下文的配置文件,它定义了bean的创建、依赖关系以及其他的配置信息。在`applicationContext.xml`中,我们可以声明bean的实例化、属性注入、bean之间的依赖关系、AOP...
在Spring框架中,`applicationContext.xml`是核心配置文件,用于定义bean的声明、依赖注入、数据源配置、事务管理等。在这个配置文件中,我们可以深入理解Spring如何管理和协调应用程序的各个组件。以下是对`...
Spring ISofttone可能是这个压缩包中包含的一个示例项目,它可能演示了如何在Spring应用中使用`applicationContext.xml`配置灵活性代理,包括IoC容器的bean定义、AOP的使用以及事务管理等。通过分析和学习这个项目,...
在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了bean的实例化、依赖注入、服务的装配以及整个应用上下文的行为。在Spring 2.5版本中,这个配置文件引入了许多增强的功能,提升了开发效率和灵活...
下面,我们将深入探讨Spring 2.0中的关键知识点。 1. **依赖注入**:Spring 2.0的核心特性之一是依赖注入,它使得组件之间的耦合度降低,提高了代码的可测试性。通过XML配置文件或注解,Spring可以管理对象的生命...
3. 创建Spring配置文件:在Spring的配置文件(如applicationContext.xml)中,声明DataSource、SessionFactory和TransactionManager。通常,会使用HibernateTransactionManager作为事务管理器,并通过Bean来注入...
applicationContext适合初学者编写spring容器程序学习需要
在Spring 2.0中,除了XML配置之外,还引入了基于注解的配置,使得代码更加简洁且易于维护。 三、AOP Spring的AOP模块提供了面向切面编程的能力,可以用于实现如日志记录、事务管理等跨切面关注点。Spring 2.0的AOP...
Spring的XML配置文件(如applicationContext.xml)用于声明bean及其依赖。通过@Autowired注解或XML配置,Spring可以自动装配bean,实现依赖注入。同时,Spring还提供了AOP(面向切面编程)支持,用于添加如日志、...
这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 首先,让我们理解什么是事务。事务是一组数据库操作,这些操作被视为一个单一的工作单元,要么...
这份中文用户指南详细介绍了Spring 2.0的核心概念、配置方式以及如何在实际开发中应用。以下是一些主要的知识点: 1. **依赖注入(Dependency Injection, DI)**:Spring 2.0的一大核心特性是依赖注入,它允许开发者...
- **事务管理**:Spring 2.0中的事务管理支持非常强大,不仅支持声明式事务管理,还可以与多种数据库和ORM框架无缝集成。 #### 4. MVC框架 - **概述**:Spring MVC是Spring框架的一部分,它实现了MVC(Model-View-...
另一种方法是在`struts-config.xml`中使用Spring插件的`<action>`标签,通过`classpath*:`前缀来指定Spring的配置文件。 4. **Spring的DispatcherServlet**: - 在`web.xml`中配置Spring的DispatcherServlet,它...