`
chenshengzun
  • 浏览: 115085 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring AOP 两种注入方式

 
阅读更多
第一种是基于annotation方式注入

(1)定义一个Aspect对象LogBeforeAdvice

package org.aop;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class LogBeforeAdvice {
private Logger logger = Logger.getLogger(this.getClass().getName());
@Pointcut("execution(* org.aop.IHello.*(..))")
private void logging(){}

@Before("logging()")
public void before(JoinPoint joinPoint){
  logger.log(Level.INFO,"method start ..." + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
}

@AfterReturning(pointcut="logging()" ,returning="retVal")
public void afterReturning(JoinPoint joinPoint ,Object retVal){
  logger.log(Level.INFO,"method end ..." + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
}
}



(2)定义一个接口类IHello

package org.aop;

public interface IHello {
public void hello(String hello);
}
(3)定义一个实现类HelloSpeaker

package org.aop;

public class HelloSpeaker implements IHello {

public void hello(String hello) {
  System.out.println("你好! " + hello);
}

}
(4)配置Spring配置文件

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

<bean id="logBeforeAdvice" class="org.aop.LogBeforeAdvice"></bean>
<bean id="helloSpeaker" class="org.aop.HelloSpeaker"></bean>
  <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

最后编写测试类

package org.aop;

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

public class AOPTest {

/**
  * @param args
  */
public static void main(String[] args) {
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  IHello hello = (IHello) context.getBean("helloSpeaker");
  hello.hello("陈胜尊");
}

}
测试结果为

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
2011-4-26 21:32:37 org.aop.LogBeforeAdvice before
信息: method start ...org.aop.IHello.hello
你好! 陈胜尊
2011-4-26 21:32:37 org.aop.LogBeforeAdvice afterReturning
信息: method end ...org.aop.IHello.hello


第二种方式是基于XML方式注册

(1)把Aspect类修改为

package org.aop;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.aspectj.lang.JoinPoint;

public class LogBeforeAdvice {
private Logger logger = Logger.getLogger(this.getClass().getName());

public void before(JoinPoint joinPoint) {
  logger.log(Level.INFO, "method start ..."
    + joinPoint.getSignature().getDeclaringTypeName() + "."
    + joinPoint.getSignature().getName());
}

public void afterReturning(JoinPoint joinPoint) {
  logger.log(Level.INFO, "method end ..."
    + joinPoint.getSignature().getDeclaringTypeName() + "."
    + joinPoint.getSignature().getName());
}
}

(2)修改配置文件为

  <aop:config>
  <aop:aspect id="loggin" ref="logBeforeAdvice">
   <aop:pointcut id="helloLog" expression="execution(* org.aop.IHello.*(**))"/>
   <aop:before
    pointcut-ref="helloLog"
    method="before"
   />
   <aop:after-returning
   pointcut-ref="helloLog"
   method="afterReturning"
   />
  </aop:aspect>
</aop:config >

执行结果是一样的
分享到:
评论

相关推荐

    spring AOP 引入jar包,spring IOC 引入Jar包

    5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...

    spring aop的demo

    在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...

    Spring AOP IOC源码笔记.pdf

    Spring AOP支持基于代理和基于注解的两种方式。基于代理的方式通过生成代理类来拦截方法调用,而基于注解的方式则更易于理解和使用。 总结,Spring框架的IoC和AOP特性极大地简化了Java开发,通过依赖注入解耦了组件...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    springAOP配置动态代理实现

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过在运行时插入额外的行为(如日志记录、性能监控等)来增强对象的功能。动态代理则是Spring AOP实现的核心技术之一...

    Spring AOP需要的jar

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了众多功能,包括依赖注入、面向切面编程(AOP)等。本文将详细介绍在使用Spring AOP时所需的两个关键jar包:aopalliance-1.0.jar和aspectjweaver-...

    如何实现Spring依赖注入 AOP.rar

    在Spring中,AOP主要通过两种方式实现:基于代理的AOP和基于注解的AOP。 1. **基于代理的AOP**:Spring使用JDK动态代理或者CGLIB代理来创建目标对象的代理对象,代理对象在调用真实方法前后执行增强逻辑。 2. **...

    通过动态代理模拟Spring AOP

    在Java编程领域,AOP(Aspect Oriented Programming,面向切面编程)是一种强大的设计模式,它允许程序员将关注点从核心业务逻辑中分离出来,...熟悉这两种方式,将有助于提升我们在Java开发中的灵活性和代码复用性。

    spring aop测试项目

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和解耦的编程方式,使得开发者可以将关注点分离到不同的切面中,而不是混杂在业务逻辑代码里。本测试项目旨在帮助理解并实践Spring AOP的...

    spring-aop标签和配置文件两种方式实例

    综上所述,Spring AOP提供了通过XML配置和AOP标签两种方式来实现切面编程,帮助开发者更高效地组织代码,降低维护成本。无论选择哪种方式,理解切入点表达式、通知类型和切面的概念都是至关重要的。在Spring 2.5及...

    J2EE_Spring之AOP与依赖注入例子

    Spring支持两种类型的代理:JDK动态代理和CGLIB代理。前者适用于接口实现类,后者则用于无接口类。配置AOP时,我们通常会定义一个切面(Aspect),包含切入点表达式(Pointcut Expression)来指定需要拦截的方法,...

    spring aop权限小实例

    Spring AOP支持两种织入方式:编译时织入(通过AspectJ编译器)和运行时织入(通过代理)。 在这个实例中,我们将主要关注运行时织入,因为它更易于理解和实施。首先,我们需要定义一个切面类,这个类通常包含一个...

    spring aop_aopalliance.jar_aspectjweaver.jar

    Spring AOP的实现主要分为两种方式:代理模式和织入。代理模式包括JDK动态代理和CGLIB代理,它们主要用于处理基于接口的类。如果目标对象实现了接口,Spring会使用JDK动态代理;如果没有,它会使用CGLIB生成一个代理...

    以注解方式模拟Spring IoC AOP

    Spring提供了两种主要的AOP实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring使用JDK动态代理或CGLIB动态代理创建目标对象的代理,代理对象在调用目标方法前后执行...

    javaXML方式实现SpringAop编程(源码+jar包)

    在Java开发领域,Spring框架是不可或缺的一部分,而Spring AOP(面向切面编程)则是Spring框架中的重要特性,它提供了一种优雅的方式来处理系统中的横切关注点,如日志、事务管理等。本篇文章将深入探讨如何通过XML...

    Spring IOC和Spring AOP_spring aop_springIOC

    Spring支持构造器注入、设值注入和接口注入三种方式。 3. **自动装配**:Spring提供了一种自动装配机制,可以根据Bean的类型和名称自动寻找并注入依赖。 4. **Bean的作用域**:Spring支持单例(Singleton)、原型...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB。JDK动态代理基于接口,当目标类实现了至少一个接口时,Java会生成一个代理类来执行增强的代码。而CGLIB则是在运行时通过字节码技术生成一个子类,用于...

    Spring-AOP需要的外部包

    在实际开发中,Spring AOP的配置可以通过XML或Java配置进行,也可以使用注解方式声明切面和通知。例如,你可以使用`@Aspect`注解定义一个切面类,然后用`@Before`、`@After`、`@Around`等注解定义不同的通知类型。 ...

    spring注解aop demo

    Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK代理适用于接口,当目标类实现了接口时使用;而CGLIB代理则在目标类没有实现接口时使用,它通过字节码技术创建代理对象。 **六、实战应用** 1. 日志记录:...

Global site tag (gtag.js) - Google Analytics