package onlyfun.caterpillar;
public interface IHello {
public void hello(String name);
}
package onlyfun.caterpillar;
public class HelloSpeaker implements IHello {
public void hello(String name) {
System.out.println("Hello, " + name);
}
}
package onlyfun.caterpillar;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.MethodBeforeAdvice;
public class LogBeforeAdvice
implements MethodBeforeAdvice {
private Logger logger =
Logger.getLogger(this.getClass().getName());
public void before(Method method, Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO,
"method starts..." + method);
}
}
package onlyfun.caterpillar;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.AfterReturningAdvice;
public class LogAfterAdvice
implements AfterReturningAdvice {
private Logger logger =
Logger.getLogger( this.getClass().getName());
public void afterReturning(Object object,
Method method,
Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO, "method ends..." + method);
}
}
//测试类
package onlyfun.caterpillar;
import org.springframework.context.ApplicationContext;
import org.springframework.context.
support.FileSystemXmlApplicationContext;
public class SpringAOPDemo {
public static void main(String[] args) {
ApplicationContext context =
new FileSystemXmlApplicationContext("beans-config.xml");
IHello helloProxy = (IHello) context.getBean("helloProxy");
helloProxy.hello("penghao122");
}
}
beans_config.xml
<bean id="logBeforeAdvice"
class="onlyfun.caterpillar.LogBeforeAdvice"/>
<bean id="logAfterAdvice"
class="onlyfun.caterpillar.LogAfterAdvice"/>
<bean id="helloSpeaker"
class="onlyfun.caterpillar.HelloSpeaker"/>
<bean id="helloProxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>onlyfun.caterpillar.IHello</value>
</property>
<property name="target">
<ref bean="helloSpeaker"/>
</property>
<property name="interceptorNames">
<list>
<value>logBeforeAdvice</value>
<value>logAfterAdvice</value>
</list>
</property>
</bean>
分享到:
相关推荐
在这个"一个spring例子"中,我们将深入探讨Spring的关键特性以及如何在实践中应用它们。 首先,Spring的核心特性之一是依赖注入(DI)。DI允许开发者解耦组件间的依赖关系,使得组件更加独立,易于测试和维护。在...
通过这个例子,我们可以了解到如何利用Spring构建一个完整的MVC应用,处理数据库交互,以及如何利用AOP和事务管理增强系统的功能。学习并掌握这些知识点,对于提升Java开发能力,尤其是企业级应用开发,具有重要的...
在“springcore”这个例子中,你可能将会接触到这些概念,并通过实际的代码示例来理解和应用它们。通过创建和配置Bean,理解DI的工作原理,以及如何利用Spring提供的各种功能来构建可扩展和可维护的应用程序。
本示例旨在为初学者提供一个基础的Spring应用实践,帮助理解Spring的核心概念和使用方式。 在Spring框架中,核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)...
在这个入门级的小例子中,我们将通过结合Maven来快速搭建一个Spring项目,帮助初学者理解Spring与Maven的基本用法。 首先,Maven是一个项目管理工具,它管理项目的构建、报告和依赖关系,通过一个配置文件pom.xml,...
现在,我们来看如何创建一个简单的Spring AOP例子: 1. **定义切面(Aspect)**:切面是包含通知(Advice)和切入点(Pointcut)的类。通知定义了要执行的逻辑,切入点定义了何时执行。例如,我们可以创建一个名为`...
这个"spring 学习 blog例子"是一个典型的教程,旨在帮助开发者通过实际操作来掌握Spring的核心概念和技术。 在Spring框架中,核心组件包括Spring Core、Spring Beans和Spring Context。Spring Core提供了基础的DI...
AOP是Spring的另一个重要特性,它允许开发者定义“切面”(Aspect),将关注点(如日志、事务管理等)从主业务逻辑中分离出来。在Spring AOP中,切面可以包含通知(Advice)、切点(Pointcut)和连接点(Join Point...
这个“Spring的小例子”旨在为初学者提供一个简单的起点,让他们能够快速理解和掌握Spring的核心概念。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
在这个简单的例子中,`Spring IOC AOP MVC 简单例子`可能是整个项目的整合示例,它将上述三个核心组件结合在一起,演示了如何在一个实际的Web应用中使用Spring。这个示例可能会包括一个简单的用户登录功能,展示如何...
例如,你可以创建一个名为`UserService`的类,并通过`@Component`注解标记为Spring Bean,然后通过`@Autowired`注解自动注入依赖的` UserRepository`。 其次,AOP是Spring的另一个重要特性,它允许我们在不修改源...
在这个例子中,`LoggingAspect`是一个切面,`logBefore`方法是一个前置通知,将在匹配的方法执行前运行。 除了这些基本的通知类型,还有`@AfterReturning`(后返回通知)、`@AfterThrowing`(异常抛出通知)和`@...
在这个"一个spring的例子"中,你可能需要完成以下步骤:创建Spring项目、配置Bean、理解IoC和DI、实现AOP、进行数据库操作和构建一个简单的Spring MVC应用。通过实践这些,你将深入理解Spring框架的强大功能和灵活性...
Spring 动态代理是Spring框架中的一个重要特性,它允许我们在不修改原有代码的情况下,为对象增加额外的功能。这个"spring动态代理类的示范小版本,很简单的例子"应该是提供了一个简单易懂的示例,帮助我们理解...
本文将通过一个具体的例子来介绍如何在Spring框架中使用面向切面编程(Aspect Oriented Programming, AOP)。我们将关注如何定义一个切面(Aspect),以及如何在目标方法(即被通知的方法)执行前后添加特定的行为。...
要创建一个Spring AOP的例子,我们首先需要定义一个切面类,它可能包含一个或多个通知方法。然后,我们需要定义切入点表达式,这可以使用`@Pointcut`注解完成。接下来,我们可以使用`@Before`, `@After`, `@Around`,...
在本篇“spring学习笔记(十六)-声明式事务的例子”中,我们将深入探讨这一主题。 首先,声明式事务管理基于AOP(面向切面编程)实现,Spring通过代理模式在方法调用前后自动插入事务管理的代码。它主要通过两种方式...
Spring 2.5 AOP(面向切面编程)是Java应用程序中的一个重要概念,它允许开发者在不修改原有代码的情况下插入新的行为或监控。这个例子旨在帮助我们理解和应用Spring框架的AOP特性。以下是对该主题的详细解释: 一...
连接点是在程序执行过程中可以插入切面的一个点,如方法调用或异常处理;通知是在特定连接点上执行的动作;切点是定义通知将应用到的一组连接点的规范。 在Spring中,我们可以通过注解来声明切面。首先,创建一个带...