`
baobeituping
  • 浏览: 1042774 次
  • 性别: 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的方法时,都自动执行了用户验证、事务处理及日志记录等相关操作,满足了我们应用的需求。

分享到:
评论

相关推荐

    基于xml的SpringAOP实例

    基于xml代码的SpringAOP实例详解,适合初步学习springAOP的开发人员了解该功能的使用。

    详解Spring Aop实例之xml配置

    本篇文章主要介绍了详解Spring Aop实例之xml配置,使用xml可以对aop进行集中配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    spring aop xml 实例

    aop入门。

    SpringAop实例

    SpringAop实例,包括xml和配置两种方式.jar齐全

    Spring 2.0 开发参考手册

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    spring注解&XML配置AOP

    spring注解 XML配置AOP的一个实例

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

    NULL 博文链接:https://moshow.iteye.com/blog/1613947

    spring aop 实现源代码--xml and annotation(带lib包)

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    spring中aop的xml配置方法实例详解

    AOP的配置方式有2种方式:xml配置和AspectJ注解方式。下面这篇文章主要给大家介绍了关于spring中aop的xml配置方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

    spring的aop切面编程实例

    实现spring的aop的操作,采用AspectJ技术,通过xml的配置来实现,本人亲自测试过,aop相关架包已引入

    spring4示例代码

    spring-3 演示使用动态代理模式实现面向切面编程 使用注解方式进行AOP编程及使用配置xml方式进行AOP编程 spring-4 演示了spring与JDBCTemplate配合使用 spring-5 演示了声明式事务及使用xml配置文件处理事务

    Spring中基于xml的AOP的详细步骤

    主要介绍了Spring中基于xml的AOP的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    spring.net中文手册在线版

    12.6.使用ProxyFactory类以编程方式创建AOP代理 12.7.管理目标对象 12.8.使用“自动代理”功能 12.8.1.自动代理对象的定义 12.8.1.1.ObjectNameAutoProxyCreator 12.8.1.2.DefaultAdvisorAutoProxyCreator 12.8.1.3....

    spring aop学习实例

    包内是aop入门的一些小例子。包括java代码和其中用到的xml文件。一个子包(如aop包)里有一个可执行应用程序。

    SpringBoot开发实战(实战案例)

    案例02 基于xml配置的构造方法注入 案例03 基于xml配置的setter方法注入 案例04 基于注解的依赖注入 案例05 Bean的实例化 案例06 Bean的作用域 案例07 OOP方式实现日志记录 案例08 AOP方式实现日志记录 案例09 基于...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

Global site tag (gtag.js) - Google Analytics