- 浏览: 348094 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
pacoson:
感谢楼主。请受小生一拜。
ANT预编译JSP -
zhuhongming123:
一楼的同学Lucene4.* 以上的 已经改成了Numeric ...
Lucene日期排序及组合查询 -
ywjk520:
RangeQuery在哪个包里?
Lucene日期排序及组合查询 -
willwen:
有个疑问,楼主,为何初始化bits 从txt读取已有的网址是直 ...
布隆过滤器(Bloom Filter)之java实例 -
yu_226528:
还不如没有呢
jFreeChart 在jsp页上实现简单的折线图、柱状图
AOP 面向切面,可以让我们在不修改业务代码的前提下,在业务代码执行前后进行执行相应的模块,这样,我们就可以把诸如日志的功能模块合核心业务模块分隔开来,以往的的日志做法都是由核心模块主动的调用日志记录功能,耦合性很强,使用AOP技术,可以将日志模块作为切面,插入到核心业务前执行,核心业务并不主动的调用日志记录功能
本例中使用GreetingHelloworldImpl代表核心业务模块,使用LoggerService代表作为aop实现的日志模块
核心业务并没有主动依赖日志模块
package SimpleAOPTest; public interface GreetingHelloworld ...{ public void sayHelloworld(); } package SimpleAOPTest; public class GreetingHelloworldImpl implements GreetingHelloworld ...{ private String greetingText; private String greetingFromConstructor; public GreetingHelloworldImpl(String greetingFromConstructor)...{ this.greetingFromConstructor=greetingFromConstructor; } public GreetingHelloworldImpl()...{ } public String getGreetingText() ...{ return greetingText; } public void setGreetingText(String greetingText) ...{ this.greetingText = greetingText; } public void sayHelloworld() ...{ System.out.println(this.getGreetingText()); System.out.println(this.getGreetingFromConstructor()); } public String getGreetingFromConstructor() ...{ return greetingFromConstructor; } public void setGreetingFromConstructor(String greetingFromConstructor) ...{ this.greetingFromConstructor = greetingFromConstructor; } }
日志模块:
package SimpleAOPTest; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class LoggerService implements MethodBeforeAdvice ...{ public LoggerService()...{ } public void before(Method method, Object[] obj, Object target) throws Throwable ...{ System.out.println("this is info from LoggerService"); } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > <beans> <bean id="greetingTarget" class="SimpleAOPTest.GreetingHelloworldImpl"> <constructor-arg> <value>this is helloworld from construtor</value> </constructor-arg> <property name="greetingText"> <value>hello world!</value> </property> </bean> <bean id="loggerService" class="SimpleAOPTest.LoggerService"></bean> <bean id="greeting" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <list> <value>SimpleAOPTest.GreetingHelloworld</value> <!-- 拦截GreetingHelloworld接口中的方法 --> </list> </property> <property name="interceptorNames"> <list> <value>loggerService</value> <!-- 处理loggerService请求,切入 --> </list> </property> <property name="target"> <ref bean="greetingTarget"/> <!-- 然后处理greeting请求 --> </property> <!-- 代理目标为类时设置 <property name="proxyTargetClass"> <value>true</value> </property> --> </bean> </beans>
测试代码:
package SimpleAOPTest; import java.io.File; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class TestHelloWorld ...{ public static void main(String[] args) ...{ String filePath=System.getProperty("user.dir")+File.separator+"SimpleAOPTest"+File.separator+"hello.xml"; BeanFactory factory=new XmlBeanFactory(new FileSystemResource(filePath)); //代理目标为接口时使用 GreetingHelloworld greetingSerview=(GreetingHelloworld)factory.getBean("greeting"); //代理目标为类是使用,并配置xml中proxyTargetClass,需要CGLIB包 //<property name="proxyTargetClass"> //<value>true</value> //</property> //GreetingHelloworldImpl greetingSerview=(GreetingHelloworldImpl)factory.getBean("greeting"); greetingSerview.sayHelloworld(); } }
运行结果:
2007-5-14 23:13:47 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from file [E:\项目\SpringInActionStudy\SimpleAOPTest\hello.xml]
this is info from LoggerService
hello world!
this is helloworld from construtor
可以看到,日志模块打印的信息“this is info from LoggerService”在核心业务运行之前执行了,这样,我们就算对日至模块进行天翻地覆的变化,都不会影响我们的核心业务
发表评论
-
在Struts中基于Spring的AOP MethodInterceptor(拦截器)的权限验证
2010-08-13 13:34 1701本程序是关于"某考试系统"中的aop应用. ... -
反射实现 AOP 动态代理模式(2)
2010-08-05 12:40 936上面类中出现的Logger类和Level枚举还是和上一上例子的 ... -
反射实现 AOP 动态代理模式(1)
2010-08-05 12:37 905其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方 ... -
Spring事务配置的五种方式
2010-06-25 16:51 776前段时间对Spring的事务配置做了比较深入的研究,在此之间对 ... -
使用 Spring 2.5 注释驱动的 IoC 功能(2)
2010-06-25 16:37 897使用 JSR-250 的注释 Sprin ... -
使用 Spring 2.5 注释驱动的 IoC 功能(1)
2010-06-25 16:36 736概述 注释配置相对于 XML 配置具有很多的优势: 它可以 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:18 1057采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring事务配置方法(TransactionProxyFactoryBean)
2010-05-11 15:10 1082采用这种方式的配置时候,配置文件的增加非常快,每个bean有需 ... -
spring事务配置方法(TransactionProxyFactoryBean继承)
2010-05-11 15:07 1124大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类 ... -
spring事务配置方法(BeanNameAutoProxyCreator)
2010-05-11 15:05 1136采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统 ... -
spring声明式事务
2010-05-11 14:26 839Spring中几种常见的事务配置,是Aop和Ioc的充分体现以 ... -
使用动态代理实现简单AOP
2010-05-01 19:02 797Spring默认使用JDK动态代理来实现AOP,如果业务对象没 ... -
Sping acegi 配置文件
2010-05-01 18:23 967applicationContext-acegi-securi ... -
Spring的BeanFactory
2010-05-01 18:17 783一、Spring装配Bean的过程 1. 实例化; 2. 设置 ... -
使用Spring方法注入协调不同步的bean
2010-05-01 18:00 1235<?xml version="1.0" ... -
几种加载Spring的配置文件的方式
2010-05-01 16:49 1290package com.liu.test; pu ... -
Quartz在Spring中动态设置cronExpression
2009-11-20 15:26 1242什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什 ... -
使用Spring发邮件
2009-11-07 14:15 994关于Spring的邮件发送的功能演示: (我把程序中一些敏感 ... -
Spring中的Quartz配置
2009-11-07 10:16 912Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
Spring ~IOC Annotations
2009-10-29 18:49 10421.1 零配置使用场合 IOC Annotations ...
相关推荐
在这个入门实例中,我们将深入理解Spring AOP如何实现简单日志记录。 首先,AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入(Weaving)。切面是AOP中的核心...
以下是一个简单的Spring AOP入门实例步骤: 1. 首先,定义一个切面类,包含通知方法。例如,一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example*...
**Spring AOP 入门及其实例讲解** 在软件开发中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性,减少冗余,并将关注点分离。Spring框架是Java开发中的一个流行...
### Spring2-AOP入门实例教程知识点详解 #### 一、Spring框架概述 - **轻量级J2EE开发框架**:Spring是一个轻量级的Java应用框架,它为开发复杂的企业级应用提供了一种简化的方法。 - **发展历程**:自2002年发布...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
本教程将通过一个简单的Spring AOP入门案例,帮助初学者理解这一概念。 ### 一、AOP基础 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或数据。在Spring AOP中,切面可以由一个类定义...
本实例将带你深入理解并实践Spring AOP与@AspectJ的结合使用。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,它允许程序员定义“切面”,即跨越多个对象的行为或责任。这些切面可以包含业务逻辑、日志、...
一个基于@AspectJ的spring2.0 AOP应用实例,很小很简单,没有任何额外信息,最适合AOP入门学习。使用log4j打印信息。把项目直接import进myeclipse就可以使用啦......
以上就是 Spring 和 Struts 的基础概念及入门实例的创建流程。这两个框架各有优势,Spring 更注重模块化和灵活性,而 Struts 则更侧重于 MVC 结构的实现。在实际项目中,两者常被一起使用,形成所谓的“Spring + ...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP (Aspect Oriented Programming) 是一种面向切面编程的技术,在Spring框架中得到了良好的支持。通过这种方式,开发者可以更加灵活地组织代码,使得...
在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...
**Spring AOP 入门篇:面向切面编程的注解与XML模式** 在软件开发中,Spring框架因其强大的功能和灵活性而广受欢迎,尤其是在企业级应用开发中。本教程将深入探讨Spring中的核心概念之一——面向切面编程(Aspect-...
** Jersey2.13 + Spring3.2.3入门实例详解** 本文将深入探讨如何结合Jersey 2.13和Spring 3.2.3框架构建一个入门级的Web服务应用。首先,我们来了解这两个关键组件的核心功能。 **Jersey** 是Java语言中最流行的...
本教程将深入探讨Spring AOP的概念、工作原理以及如何通过实例来理解和应用这一技术。 **一、Spring AOP基本概念** 1. **切面(Aspect)**:切面是关注点的模块化,例如日志、事务管理。在Spring AOP中,切面由...
在这个"spring入门实例"中,我们将探索如何利用Spring和Spring JDBC构建一个简单的登录模块。 首先,我们需要理解Spring框架的基础概念。Spring框架的核心在于IoC(Inversion of Control,控制反转)和DI...
在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...