`
baobeituping
  • 浏览: 1065141 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

spring 2.0使用AOP实例(基于XML的配置方式)

 
阅读更多

设计系统的核心业务组件。基于针对接口编程的原则,一个好习惯是先使用接口来定义业务组件的功能,下面使用Component来代表业务组件接口。
Component.java代码如下:
package springroad.demo.chap5.exampleB;
public interface Component {
void business1();//商业逻辑方法1
void business2();//商业逻辑方法2
void business3();//商业逻辑方法3
}
写一个Component的实现ComponentImpl类,ComponentImpl.java代码如下:
package springroad.demo.chap5.exampleB;
public class ComponentImpl implements Component {
public void business1() {
System.out.println("执行业务处理方法1");
}
public void business2() {
System.out.println("执行业务处理方法2");
}
public void business3() {
System.out.println("执行业务处理方法3");
}
}
写一个Spring的配置文件,配置业务Bean。aspect-spring.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-2.0.xsd">
<bean id="component"
class="springroad.demo.chap5.exampleB.ComponentImpl">
</bean>
</beans>
然后写一个用于在客户端使用业务Bean的ComponentClient类,代码如下:
package springroad.demo.chap5.exampleB;
import org.springframework.context.ApplicationContext;
public class ComponentClient {
public static void main(String[] args) {
28
ApplicationContext context=new org.springframework.context.support.ClassPathXmlApplicationContext("springroad/demo/chap5/exampleB/aspect-spring.xml");
Component component=(Component)context.getBean("component");
component.business1();
System.out.println("-----------");
component.business2();
}
}
运行程序,我们可以看到结果输出为:
执行业务处理方法1
-----------
执行业务处理方法2
这个业务Bean只是简单的执行业务方法中代码,现在由于企业级应用的需要,我们需要把业务Bean中的所有business打头所有方法中的业务逻辑前,都要作一次用户检测、启动事务操作,另外在业务逻辑执行完后需要执行结束事务、写入日志的操作。直接修改每一个方法中的代码,添加上面的逻辑,前面已经说过存在不可维护等诸多问题,是不可取的。
由于安全检测、事务处理、日志记录等功能需要穿插分散在各个方法中,具有横切关注点的特性,因此我们想到使用Spring的AOP来实现。
5.3.2 使用基于Schema的配置文件配置Spring AOP
定义一个用于处理横切交叉关注点问题的切面模块,Spring AOP使用纯Java的方式来实现AOP的,因此我们使用一个名为AspectBean的类来处理上面所说的问题。
作为示例,AspectBean.java中的内容如下:
package springroad.demo.chap5.exampleB;
public class AspectBean {
public void validateUser()
{
System.out.println("执行用户验证!");
}
public void writeLogInfo()
{
System.out.println("书写日志信息");
}
public void beginTransaction()
{
System.out.println("开始事务");
}
public void endTransaction()
{
System.out.println("结束事务");
}
29
}
(在实现应用中,用户验证、日志记录、事务处理都应该是在上面的方法中调用专门的模块来完成。另外,还要考虑很多问题,比如与连接点上下文相关的目标对象、参数值等。)
有了处理横切交叉问题的切面模块Bean,下面我们就可以在Spring的配置文件中进行Spring AOP相关的配置了。把aspect-spring.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"
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">
<aop:config>
<aop:aspect id="aspectDemo" ref="aspectBean">
<aop:pointcut id="somePointcut"
expression="execution(* springroad.demo.chap5.exampleB.Component.business*(..))" />
<aop:before pointcut-ref="somePointcut"
method="validateUser" />
<aop:before pointcut-ref="somePointcut"
method="beginTransaction" />
<aop:after-returning pointcut-ref="somePointcut"
method="endTransaction" />
<aop:after-returning pointcut-ref="somePointcut"
method="writeLogInfo" />
</aop:aspect>
</aop:config>
<bean id="aspectBean"
class="springroad.demo.chap5.exampleB.AspectBean">
</bean>
<bean id="component"
class="springroad.demo.chap5.exampleB.ComponentImpl">
</bean>
</beans>
上面配置文件中的黑体部分是增加的内容,原来与业务Bean相关的配置不变。
为了能正确运行客户端代码,需要把Spring项目lib目录下aspectj目录中的aspectjweaver.jar文件添加到classpath中。
不需要重新编译客户端代码,直接运行示例程序ComponentClient,会看到如下的内容输出:
执行用户验证!
30
开始事务
执行业务处理方法1
结束事务
书写日志信息
-----------
执行用户验证!
开始事务
执行业务处理方法2
结束事务
书写日志信息
由此可见,在客户调用业务Bean Component中的business1及business2的方法时,都自动执行了用户验证、事务处理及日志记录等相关操作,满足了我们应用的需求。

分享到:
评论

相关推荐

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    这篇博客文章将探讨如何在Spring 2.0中使用AOP实例,特别是通过注解来实现。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了横切关注点,即那些跨越多个对象的行为或责任。在Spring中,切...

    基于xml的SpringAOP实例

    在基于XML的配置方式下,Spring AOP提供了直观且灵活的声明式方法来实现这些关注点的分离,使得业务逻辑代码更为简洁。 在Spring AOP中,我们首先需要定义一个切面(Aspect),它包含了若干个通知(Advice)。通知...

    Spring2.0 实例源码

    在Spring2.0中,可以通过XML配置文件、注解或者基于Java的配置来实现DI,这大大提升了开发效率。 其次,Spring2.0增强了AOP的功能。AOP允许开发者将横切关注点(如日志、事务管理、安全性等)从核心业务逻辑中分离...

    spring-aop实例

    7. **配置方式**:Spring AOP可以通过XML配置、注解或者自定义的Aspect类来实现。注解驱动的AOP更简洁,而自定义Aspect类提供了更大的灵活性。 8. **织入(Weaving)**:织入是将切面应用到目标对象以创建代理对象...

    spring2.0学习源码

    这一版本引入了基于注解的AOP支持,使得开发者可以更直观地定义切面,无需编写XML配置。例如,@Before、@After、@Around等注解可以直接应用于方法上,简化了事务管理、日志记录等跨切面的处理。 另一个显著的改进是...

    struts2.0与spring2.0集成实例

    7. **最佳实践**:在实际开发中,集成Struts2和Spring可以遵循一些最佳实践,例如使用注解进行配置以减少XML的复杂性,使用Spring的AOP处理事务,以及利用Spring的MVC支持来简化视图和模型的处理。 8. **测试与调试...

    spring aop xml 实例

    本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时。 首先,我们需要在Spring的配置文件中启用AOP...

    使用Spring配置文件实现AOP

    在Spring的XML配置文件中,我们可以创建一个`&lt;aop:config&gt;`元素,并在其内部定义`&lt;aop:advisor&gt;`来创建Advisor。Advisor的`advice-ref`属性用于指定通知bean的ID,`pointcut-ref`属性用于指定切点bean的ID。 2. ...

    spring2.0核心技术最佳实践源代码

    5. **Spring的Bean工厂与应用上下文**:Bean工厂和应用上下文是Spring容器的两个主要实现,它们负责管理Bean的实例化、配置和依赖注入。理解这两者之间的区别和应用场景是深入理解Spring的基础。 6. **数据访问集成...

    spring 应用aop 实例

    在Spring 4.0中,AOP支持更加完善,除了XML配置外,还可以使用Java配置或基于注解的配置。此外,Spring还提供了基于代理的AOP和基于CGLIB的AOP,可以根据实际需求选择合适的方式。 通过上述步骤,你可以创建一个...

    Spring2.0

    在提供的文档中,《Spring JavaConfig参考文档》详细介绍了如何使用Java类来替代XML配置。Spring 2.0引入了@Configuration和@Bean注解,使得配置更加直观且易于测试。这种方式减少了XML配置的复杂性,提高了代码的...

    struts2+hibernate3.2+spring2.0配置+入门实例

    本文将详细介绍如何配置和构建一个基于Struts2、Hibernate3.2和Spring2.0的企业级Java应用入门实例。首先,我们理解整体架构,这有助于我们更好地了解各个组件的作用。 **1. 整体架构** 在企业级Java应用中,常见...

    Spring Aop使用实例

    **Spring AOP 使用实例** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它提供了一种在不修改原有代码的情况下,通过代理方式添加额外功能的技术。这种技术使得我们...

    spring 2.0中文参考手册

    通过XML配置文件或注解,开发者可以声明组件及其依赖,由Spring容器负责实例化、装配和管理这些对象。这种控制反转的模式使得代码更加灵活,降低了组件间的耦合度。 其次,Spring的AOP特性允许开发者定义横切关注点...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    通过实例解析,读者将了解到如何使用XML配置或注解来实现依赖注入,以及如何创建和管理Bean。 接下来,教程会详细讲解Spring的AOP(面向切面编程,Aspect Oriented Programming)特性。AOP允许开发者在不修改原有...

    Spring的AOP实例(XML+@AspectJ双版本解析+源码+类库)

    **Spring的AOP实例——XML与@AspectJ双版本解析** Spring框架的AOP(面向切面编程)是其核心特性之一,它提供了一种在不修改代码的情况下,对程序进行横向关注点(如日志、事务管理、权限控制等)插入的方法。本...

    java学习之spring2.0

    - **Bean的定义与实例化**:通过XML或注解定义Bean,BeanFactory负责根据定义创建和管理Bean。 - **Bean的特性**:包括初始化方法、销毁方法、依赖检查、自动装配等,允许自定义Bean的生命周期。 - **Bean的高级...

    SpringAop实例

    在这个"SpringAop实例"中,可能包含了演示如何创建和使用这两种配置方式的代码示例。文件列表中的"spring32"可能是指Spring 3.2版本的相关文件,这个版本的Spring对AOP的支持已经相当成熟。 通过学习这个实例,你...

Global site tag (gtag.js) - Google Analytics