- 浏览: 1042774 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
设计系统的核心业务组件。基于针对接口编程的原则,一个好习惯是先使用接口来定义业务组件的功能,下面使用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的方法时,都自动执行了用户验证、事务处理及日志记录等相关操作,满足了我们应用的需求。
- src.rar (2.4 KB)
- 下载次数: 2
发表评论
-
spring整合memeched
2017-11-23 14:18 465XMemcached是一个基于Java nio的memcac ... -
Spring 4 MVC @RestController 注解实现REST Service
2017-11-07 10:56 928简短 & 快速介绍REST REST表示 Repr ... -
SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
2017-10-25 15:54 4951、基本概念 1.1、Spring Sp ... -
spring mvc 文件上传
2017-10-03 23:14 487直接上代码吧,大伙一看便知 这时:commonsmulti ... -
SpringMVC对静态资源进行缓存
2017-09-26 15:19 378在dispatcher-servlet.xml中配置: ... -
springmvc常用注解标签详解
2017-09-12 08:30 3251、@Controller 在SpringMVC ... -
Spring JdbcTemplate 与 事务管理 学习
2014-11-12 09:35 745Spring的JDBC框架能够承担资源管理和异常处理的工作, ... -
Spring中使用annotation注入
2014-11-12 08:42 640我们使用Spring 一般式在xml配置文件中进行注入.但是 ... -
spring集成数据库连接池
2014-11-07 14:30 770我项目中使用的是proxool数据库连接池, 首先在web ... -
spring+xifre 发布webservice服务
2011-12-28 10:01 1621利用xfire编写webservice的例子,内容如下1. x ... -
spring3.0事物配置
2011-11-02 16:47 1836第一种配置方法:基于XML的事务管理 这种方法不需要对原有的 ... -
spring aop的注解配置中,前置,后置,环绕通知,以及异常通知怎么获得被代理方法的参数
2011-10-23 22:17 4918定义的接口 package com.aspectaop; ... -
spring 事物配置全文
2011-10-20 10:39 1003根据代理机制不同,有以下几种配置方式: 先定义 ... -
spring 2.0使用AOP实例(基于Annotation的配置方式)
2011-10-19 14:53 1172使用Java5注解配置及使用Spring AOPSpring2 ... -
spring1.x使用AOP实例
2011-10-19 08:23 1305spring1.x使用AOP配置。 applicationC ... -
使用 Spring 注释学习笔记
2011-10-18 10:33 806概述 注释配置相对于 XML 配置具有很多的优势: 它可 ... -
spring 3.0配置实用例-applicationContext.xml 空白文档
2011-10-18 10:24 2303<?xml version="1.0" ... -
使用spring2.5注释驱动的IOC功能
2011-10-13 14:26 687概述 注释配置相对于 XML 配置具有很多的优势: 它可 ... -
利用Annotation来实现属性的注入
2011-05-06 21:36 1146在以前的SPRING中我们通常采用的方式是在XML文件来来实现 ... -
使用SPRING的IOC的好处
2011-03-01 00:06 1750IOC:控制反转,它是不 ...
相关推荐
基于xml代码的SpringAOP实例详解,适合初步学习springAOP的开发人员了解该功能的使用。
本篇文章主要介绍了详解Spring Aop实例之xml配置,使用xml可以对aop进行集中配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
aop入门。
SpringAop实例,包括xml和配置两种方式.jar齐全
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的一个实例
NULL 博文链接:https://moshow.iteye.com/blog/1613947
在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...
AOP的配置方式有2种方式:xml配置和AspectJ注解方式。下面这篇文章主要给大家介绍了关于spring中aop的xml配置方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
实现spring的aop的操作,采用AspectJ技术,通过xml的配置来实现,本人亲自测试过,aop相关架包已引入
spring-3 演示使用动态代理模式实现面向切面编程 使用注解方式进行AOP编程及使用配置xml方式进行AOP编程 spring-4 演示了spring与JDBCTemplate配合使用 spring-5 演示了声明式事务及使用xml配置文件处理事务
主要介绍了Spring中基于xml的AOP的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
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....
包内是aop入门的一些小例子。包括java代码和其中用到的xml文件。一个子包(如aop包)里有一个可执行应用程序。
案例02 基于xml配置的构造方法注入 案例03 基于xml配置的setter方法注入 案例04 基于注解的依赖注入 案例05 Bean的实例化 案例06 Bean的作用域 案例07 OOP方式实现日志记录 案例08 AOP方式实现日志记录 案例09 基于...
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....