首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

接口的兑现

2012-09-03 
接口的实现AOP专业术语:1.切面 Aspect:交叉要实现的功能2.连接点:应用程序执行过程中插入切面的地点,此处

接口的实现
AOP专业术语:

1.切面 Aspect:交叉要实现的功能
2.连接点:应用程序执行过程中插入切面的地点,此处可以是方法的调用,异常抛出甚至是要修改的字段
3.通知:通知是切面的实际实现。它通知应用系统新的行为,通知在连接点插入到应用系统中。
4.切入点:定义了通知应该应用在哪些连接点.通常通过指定类名和方法名,或匹配类名和方法名
式样的正则表达式来指定切入点。
5.引入:允许为已存在的类添加新的属性和方法
6.目标对象: 被通知的对象。即可是编写的类也可以是添加定制行为的第三方类。
7.代理对象:将通知应用到目标对象后创建的对象

8.织入:将切面应用到目标对象从而创建一个新的代理对象的过程.切面在指定接入点
   被织入到目标对象中,织入发生在目标对象声明周期的多个点上。
    1、编译器:切面在目标对象编译时织入(需要特殊的编译器)。
     Java源代码.java------>.class

    2、类装载期:切面在目标对象被载入到JVM时织入(需要特殊的类载入器,在类的载入到应用程序之前增强目标对象的字节码)。
     .class---JVM
     
    3、运行期 切面在应用系统运行时织入(通常:aop)
  

9.什么是AOP呢?
   在不该变源码的情况下,为类添加新的功能。
-------------------------------------------
例子:
接口代理
前置通知的实现:------
创建一个接口类:<EmpService.java>
package cn.csdn.service;
//接口类
public interface EmpService {

public void work();
}

创建一个实现类接口:
<EmpserviceImpl.java>

package cn.csdn.service;
//接口实现类
public class EmpServiceImpl implements EmpService{

@Override
public void work() {
System.out.println(".....员工工作????");

}
 
}


创建一个class类
<MyBeforeAdvice.java>类


package cn.csdn.advice;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class MyBeforeAdvice implements MethodBeforeAdvice{
/*
* arg0:代表的是方法。
* arg1:代表的是方法参数。
* arg2:代表的是目标对象
*/
@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("员工大卡..............");

}

}

bean的声明在<applicationContext.xml>中

<!-- 声明前置通知 -->
<bean id="myBeforeAdvice" />
<!--  声明目标对象 -->
<bean id="empServiceTarget" />

<!--声明代理对象  -->
<bean id="empServiceProxy" />
</property>
</bean>

第三部:
<App.java>中测试类


package cn.csdn.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class App {
  @Test
  public void app(){
  /*获取代理对象*/
  ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:a*.xml");
  EmpService es=(EmpService) ac.getBean("empServiceProxy");
/*调用代理对象的方法*/
  es.work();
  }
}

-------------------------------
基于接口的实现:
EmpService es=(EmpService) ac.getBean("empServiceProxy");

基于类的实现:

在bean中
<!-- 采用CGLIB的代理 -->
<property name="proxyTargetClass" value="true"/>
添加类库文件包:lib/cglib-nodep-2.1_3.jar
将App.java
EmpServiceImpl es=(EmpServiceImpl) ac.getBean("empServiceProxy");

热点排行