AOP,面向横切面的编程,这是相对于面向对向的编程的一种提高,
OOP:面向对像,就是考虑的如关于继承,多态,接口这些跟业务逻辑相关的核心的方法,
而面向切面的呢,就是在这些核心方法里,我们要做日志,安全,事物等操作,而这些
东西在每个核心的方法里都会用到,这样,这些非核心的应用就会遍布整个系统,管理是不是很麻烦?
AOP就是为解决这个而存在的,具体的实现,楼主可以参考一下别的文档。
关于实现技术,有Aspect和Spring 的AOP框架,还有个Java的反向代理这么个东西?第三个好像是这个,记不太清了。
建议看看:精通Spring这本书,由浅入深,很不错的。
OOP:面向对像,就是考虑的如关于继承,多态,接口这些跟业务逻辑相关的核心的方法,
而面向切面的呢,就是在这些核心方法里,我们要做日志,安全,事物等操作,而这些
东西在每个核心的方法里都会用到,这样,这些非核心的应用就会遍布整个系统,管理是不是很麻烦?
AOP就是为解决这个而存在的,具体的实现,楼主可以参考一下别的文档。
关于实现技术,有Aspect和Spring 的AOP框架,还有个Java的反向代理这么个东西?第三个好像是这个,记不太清了。
建议看看:精通Spring这本书,由浅入深,很不错的。
解决方案 »
- 关于j2ee web中进程的问题,主要是实现内容里的一个功能
- jsp
- The type Employee is already defined?
- 如何在java代码中获得jsp页面上的文本?
- 论坛系统小问题,怎么让管理员的名字区别于普通用户?
- struts2 异常问题
- 极度郁闷。。,昨天买个jsp空间,空间商让我把lib下jar包放在classes目录下,我该怎么配置啊?
- 求解答Hibernate关于单表中父子关系的映射文件怎么写?
- 初用 Hibernate 总是有个WARNING
- 把Hibernate连Oracle的程序移植到JDeveloper上,录像加程序实例,谁要?
- acegi登录认证能不能从两个或多个表中验证?
- ibatis 联表查询结果集取值问题
AOP就是一个切面,通俗点讲就是把程序切成两半,让后往里面添加自己的东西;思想就是这样,
楼主既然接触spring,那么一定知道hibernate;
public boolean add(Leave l) {
boolean ks=true;
try {
session= sf.openSession();
session.save(l);
session.beginTransaction().commit();
} catch (HibernateException e) {
ks = false;
e.printStackTrace();
} finally {
if(session!=null) {
session.close();
}
}这是一个很普遍的数据库存储的代码,然而我们每次都要写出一样的代码来,而真正变化的往往只有session.save(l);这一句话,而且他的代码每次操作数据库都要重复写一遍;
重复代码便代表此代码不够健壮;但是如果要移除,他们确实一个流程的,session.save(l);需要事务beginTransaction才能够递交,事务中夹杂着业务,对于面向对象而言是很难解决的;由此,我们可以利用AOP,AOP的思想就是分离业务中的事务等信息,把在事务中间的业务逻辑拿出来;
当然这是以点概面的说法,不过只是让楼主能够简单的理解,面向切面而已
OOP:面向对像,就是考虑的如关于继承,多态,接口这些跟业务逻辑相关的核心的方法,
而面向切面的呢,就是在这些核心方法里,我们要做日志,安全,事物等操作,而这些
东西在每个核心的方法里都会用到,这样,这些非核心的应用就会遍布整个系统,管理是不是很麻烦?
AOP就是为解决这个而存在的,具体的实现,楼主可以参考一下别的文档。
看看这个package com.east.spring.proxy;import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Aspect;
/**
* @author:East(张栋芳)
* @date:Nov 27, 2008
* @content:使用Aspect来实现AOP
*
*/
//定义一个Aspect表示这个类是一个切面的类
@Aspect
public class SecurityHandler{
/**
* 定义一个切入点 第一个*是方法的返回值
* add*是以add开始的所有方法
* ..是表示一个或多个参数
* addAllMethod()这个方法是Pointcut的标识
*/
@Pointcut("execution(* add*(..))")
public void allMethod(){};
/**
* 引用PointCut的标识表示是在调用方法之前执行安全检查方法
* 定义Advice,标识在那个切入点何处织入此方法
*/
@Before("allMethod()")
//安全检查方法
public void checkSecurity(){
System.out.println("----------checkSecurity-----------");
}}