- 浏览: 822016 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
Spring AOP总结
Spring AOP(Aspect Oriented Programming) 应用程序通常包含两种代码:一是核心业务代码,一是和业务关系不大的代码如日志、事物处理等。 AOP的思想就是使这两种代码分离,从而降低了两种代码的偶合性,达到了易于重用和维护的目的。 AOP和OOP: 在AOP里,每个关注点的实现并不知道是否有其他关注点关注它,这是AOP和OOP的主要区别, 在AOP里组合的流向是从横切关注点到主关注点,在OOP中组合流向是从主关注点到横切关注点。 AOP和OOP所关注的对象不同,AOP是OOP有益的补充,不是对立面。 AOP的3个关键概念: 1:切入点:(PiontCut) 连接点(Jion piont):是指程序运行中的某个阶段,如方法的调用、异常的抛出等。 PiontCut就是Jion piont点的集合,它是程序中需要注入的Advice的集合。指明Advice 在什么 条件下才被触发。 2:通知(Advice): 某个连接点采用的处理逻辑,也就是向连接点注入的代码。 3:Advisor 是PiontCut和Advice的配置器,它包含PiontCut和Advice,是把Advice注入到PiontCut位置的代码。 Spring 的3种切入点的实现: 1:静态切入点: 静态切入点只限于给定的方法和目标类。不考虑方法的参数。 2:动态切入点: 动态切入点不仅限于给定的方法和目标类,还可以指定方法的参数。 动态切入点有很大的性能损耗,一般很少使用。 3:自定义切入点: 正在发展 Spring 的通知: 1:Interception Around通知 Interception Around在Jion Point的前后执行。实现Interception Around通知要实现 MethodInterceptor接口,示例代码如下: (1)Logger logger=Logger.getLogger(this.getClass().getName()); public Object invoke(MethodInvocation arg0) throws Throwable { // TODO Auto-generated method stub logger.log(Level.INFO,arg0.getArguments()[0]+"开始审核数据:"); Object result=arg0.proceed(); logger.log(Level.INFO,arg0.getArguments()[0]+"审核数据结束!"); return result; } (2) /* public class LoginInterceptor implements MethodInterceptor{ public Object invoke(MenthodInvocation invocation) throws Throwable{ System.out.println("开始审核数据"); Object result = invocation.proceed(); System.out.println("审核数据结束"); return result; } }*/ 2:Before通知 (1)通过log4j.properties实现 Logger logger=Logger.getLogger(this.getClass().getName()); public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { // TODO Auto-generated method stub logger.log(Level.INFO,arg1[0]+"开始数据操作:"); } (2): Before通知在JiontPoint的前执行。实现Befored通知要实现 MethodBeforeAdvice接口,示例代码如下: public class LoginBeforeAdvice implements MethodBeforeAdvice{ public void before(Menthod m,Object [] atgs,Object target) throws Throwable{ System.out.println("开始审核数据"); } } 3:After Return 通知 After Return通知在JiontPoint后执行。实现After Returnd通知要实现 AfterReturningAdvice接口,示例代码如下: public class LoginAfterAdvice implements AfterReturningAdvice{ public void afterReturning(Method m,Object [] atgs,Object target) throws Throwable{ System.out.println("审核数据结束"); } } 4:Throw通知 (1)Logger logger=Logger.getLogger(this.getClass().getName()); public void afterThrowing(Method arg1, Object[] arg2,Object arg3,Throwable subclass ) throws Throwable{ System.out.println(arg2[0]+"审核数据异常"); } Throw通知在JiontPoint抛出异常时执行。实现Throw通知要实现 ThrowsAdvice接口,示例代码如下: public class LoginThrowAdvice implements ThrowsAdvice{ public void afterThrowing(Method arg1, RemoteException ex) throws Throwable{ System.out.println("审核数据异常"); } } 5:Introduction 通知 Introduction通知在JiontPoint 调用完毕后执行。实现Introduction通知要实现 IntroductionAdvisor接口和IntroductionInterceptor接口。 用ProxyFactoryBean创建AOP代理 使用org.springfamework.aop.framework.ProxyFactoryBean是创建AOP代理的基本方式。 1:使用ProxyFactoryBean代理目标类中的所有方法(参考代码:workspace20070228\SpringAOP1) 示例代码: <beans> <bean id="log" class="logAround"/> <bean id="logBefore" class="logBefore"/> <bean id="logAfter" class="logAfter"/> <bean id="logThrow" class="logThrow"/> <bean id="timebook" class="TimeBook"/> <!-设定代理类--> <bean id="logProxy" class ="org.springframework.aop.framework.ProxyFactoryBean"> <!--代理的是接口--> <property name="proxyInterfaces"> <value>TimeBookInterface</value> </property> <!--要代理的目标类--> <property name="target"> <ref bean="timebook"/> </property> <!--程序中的Advice--> <property name="interceptorNames"> <list> <value>logBefore</value> <value>logAfter</value> <value>logThrow</value> </list> </property> </bean> </beans> 2:使用ProxyFactoryBean代理目标类中的指定方法 示例代码: <beans> <bean id="log" class="logAround"/> <bean id="logBefore" class="logBefore"/> <bean id="logAfter" class="logAfter"/> <bean id="logThrow" class="logThrow"/> <bean id="timebook" class="TimeBook"/> <!--代理目标类的指定方法--> <bean id ="logAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref bean="log"/> </property> <!--指定要代理的方法--> <property name="patterns"> <value>.*doCheck.*</value> </property> </bean> <!-设定代理类--> <bean id="logProxy" class ="org.springframework.aop.framework.ProxyFactoryBean"> <!--要代理的目标类--> <property name="target"> <ref bean="timebook"/> </property> <!--程序中的Advice--> <property name="interceptorNames"> <list> <value>logAdvisor</value> </list> </property> </bean> </beans> --------------------------------------------------------- 正则表达式: 1:.表示可以匹配任何一个字符 2:[]表示只有[]里指定的字符才能匹配 3:*表示匹配次数 4:?表示可以匹配1或0次 5:\是正则表达式的连接符 --------------------------------------------------------------- Spring 中两种AOP代理方式 1:动态代理 动态代理是指代理的是接口,Spring默认的是动态代理 2:CGLIB代理 <beans> <bean id="log" class="logAround"/> <bean id="logBefore" class="logBefore"/> <bean id="logAfter" class="logAfter"/> <bean id="logThrow" class="logThrow"/> <bean id="timebook" class="TimeBook"/> <bean id="logProxy" class ="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyTargetClass"> <value>true</value> </property> <property name="target"> <ref bean="timebook"/> </property> <property name="interceptorNames"> <list> <value>logBefore</value> <value>logAfter</value> <value>logThrow</value> </list> </property> </bean> </beans> ----------------------------------------------------------------------- Spring 中的自动代理方式 自动代理可以跨越多个类,不管哪个类中的方法只要符合要求都可以代理 <beans> <bean id="log" class="logAround"/> <bean id="logBefore" class="logBefore"/> <bean id="logAfter" class="logAfter"/> <bean id="logThrow" class="logThrow"/> <bean id="timebook" class="TimeBook"/> <bean id="timework" class="TimeWork"/> <!--使用自动代理--> <bean id="autoProxy" class ="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> <bean id="logBeforAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice"> <ref bean="logBefore"/> </property> <property name="patterns"> <value>.*do.*</value> </property> </bean> </beans> ------------------------------------------------------------ Spring中的事务处理 事务处理是由多个步骤组成,这些步骤之间有一定的逻辑关系,作为一个整体的操作过程,所有的步骤必须同时成功或失败。 1:提交 当所有的操作步骤都被完整执行后,称为该事物被提交。 2:回滚 由于某个操作失败,导致所有的步骤都没被提交则事物必须回滚,回到事物执行前的状态。 事务的特性: ACID:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durablity) Spring中的事务处理是基于动态AOP机制的实现。 1:编程式事务处理: spring 提供的TransactionTemplate能够以编程的方式实现事务控制。 HelloADO.java: private DataSource dataSource; private PlatformTransactionManager transactionManager; public int create(String msg){ DefaultTransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); try{ JdbcTemplate jt = new JdbcTemplate(dataSource); int i=jt.update("insert into st(name,password) values('zz','zz')"); return i; }catch (Exception e){ transactionManager.rollback(status); return 0; } finally { transactionManager.commit(status); } } applicationContext.xml <beans> <bean id ="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/newdb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>lxl</value> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="helloDAO" class ="HelloDAO"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="transactionManager"> <ref bean="transactionManager"/> </property> </bean> </beans> 2:声明式事务处理: HelloADO.java: public class HelloDAO { private DataSource dataSource ; private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; jdbcTemplate = new JdbcTemplate(dataSource); } public void create(String name){ jdbcTemplate.update("insert into st(name,password)values('lxl','lxl')"); } } applicationContext.xml <beans> <bean id ="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/newdb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>lxl</value> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="helloDAO" class ="HelloDAO"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <!-- 声明式事务处理--> <bean id="helloDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <ref bean="helloDAO"/> </property> <property name="transactionAttributes"> <props> <!-- 对create方法进行事务管理,PROPAGATION_REQUIRED表示如果没有事务就新建一个事务--> <prop key="create*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans>
发表评论
-
AOP(Aspect oriented programming) 面向方面编程
2010-09-29 11:15 1120一 AOP(Aspect oriented program ... -
Spring框架与AOP思想的研究与应用
2010-09-29 11:11 1248Spring框架与AOP思想的研 ... -
Spring参考手册 IOC
2010-09-29 10:41 1273Spring参考手册 IOC 概述 ... -
Spring参考手册 AOP
2010-09-29 10:39 1464Spring参考手册 AOP 概述 ... -
Spring总结之AOP
2010-09-29 10:35 1239Spring总结之AOP AOP( ... -
对Spring AOP中三种实现方式的总结
2010-09-29 10:34 1241aop: 1: 编程式: 其中,必须先自己从s ... -
Spring IoC控制反转总结
2010-09-28 09:21 1501Spring IoC控制反转总结 ... -
Spring 是什么 以及总结
2010-09-28 08:20 1291什么是spring Spring的 ... -
Spring Jar包
2010-09-18 21:57 1666Spring Jar包 spring.jar是包含 ... -
Spring的简单应用实例
2010-08-21 18:29 996Spring的简单应用实例 ... -
spring自己总结的知识
2010-08-15 13:52 950Spring:总结用XML配置的十二个最佳实践2007-05- ... -
spring笔记
2010-08-15 13:51 1068------------------------------- ...
相关推荐
总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...
### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...
**Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...
总结起来,"spring-aop-jar"涉及了Spring框架中的面向切面编程模块,包括Spring AOP和AspectJ的集成。通过理解和熟练使用这些组件,开发者可以有效地解耦关注点,提高代码的可维护性和可扩展性。在实际项目中,结合...
Spring框架是Java开发中不可...总结,Spring框架的IoC和AOP特性极大地简化了Java开发,通过依赖注入解耦了组件,通过面向切面编程解决了共性问题。理解并熟练掌握这些概念和机制,对于提升开发效率和代码质量至关重要。
spring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wps
总结来说,Spring AOP提供了一种强大的方式来实现横切关注点,降低了代码的耦合度。无论是通过注解还是配置文件,都能够有效地实现切面的定义和拦截操作。理解并掌握Spring AOP的使用,对于提升Spring框架的应用能力...
### Spring AOP 实现流程日志跟踪 #### 一、背景与目的 在现代软件开发过程中,为了确保系统的稳定性和可维护性,通常会引入非功能性的需求来增强应用程序的功能,比如日志记录、安全控制等。这些需求往往不是业务...
总结来说,Spring AOP性能监控器通过切面编程实现了对目标方法的无侵入性监控,通过自定义注解、切面类以及配置,我们可以轻松地记录和分析应用程序的性能数据。结合源码学习,可以提升对Spring AOP机制的深入理解。
《Spring AOP:面向切面编程的深度解析》 在软件开发中,Spring框架以其强大的功能和灵活性,已经成为Java企业级应用的首选框架之一。其中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架...
在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...
总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态代理提供了强大的横切关注点管理功能。开发者可以轻松地定义切面和通知,以实现如日志、事务管理等功能,同时保持核心业务代码的清晰和简洁。在Spring Boot项目...
总结起来,Spring AOP注解版通过简单易懂的注解,使得面向切面编程变得更加直观和方便。它降低了横切关注点与业务逻辑之间的耦合度,提高了代码的可维护性和复用性。通过合理利用这些注解,开发者可以轻松地实现日志...
总结来说,这个项目提供了基于Maven和Spring的Web应用实例,展示了如何利用Spring AOP进行切面编程,包括XML配置和注解两种方式。通过学习这个项目,你可以深入理解Spring AOP的工作原理,以及如何在实际项目中有效...
### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够...
### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...
总结来说,Spring AOP通过代理模式和切面编程思想,实现了代码的解耦和模块化,提高了软件的可维护性和可扩展性。了解并熟练掌握Spring AOP的底层实现技术,对于提升开发效率和编写高质量的Java应用程序具有重要意义...