..
现在让我们看看如何创建一个方面。
首先我们创建一个接口上的例子中,我们将写我们的切入点:
公共接口MyInterface的{
公共无效F1();
公众诠释F2();
公众诠释F3()抛出异常;
公共无效F4()抛出异常;
公众诠释F5();
}
要编写一个切入点必须知道的AspectJ切入点指示符 ,在我们的例子中,我们将只使用执行相匹配的连接点的执行方法。
执行(修饰符,模式?声明RET型,图案型,图案?名称模式(参数-模式)抛出纹?)其中:
首先,我们必须创造我们自己的方面:
@看点
{公共类MyAspect
.............
}
正如我们所看到的类与@看点注解。
这是不够的,因为你必须启用AOP nell'applicationContext XML的支持:
< - !ENBLING AspectJ的 - > <aop:aspectj-autoproxy /> < - !MYASPECT - > <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
一旦你取得了这两个操作就可以创建一个忠告,例如,以前的方法F1(前咨询)执行执行的动作:
@之前(“执行(* it.mrwebmaster.aop.MyInterface.f1 (..))")
公共无效beforeF1(){
System.out.println(“前F1”);
}
由于可以从代码中看到我们以前使用的注解,它接受作为一个值,确定一个切入点表达式@。
在我们的例子中,表达式匹配所有被称为他们的修饰符,返回类型和参数输入接口it.mrwebmaster.aop.MyInterface F1 indipendetemente方法。
同样,我们可以使用的意见时执行的方法完成其执行(后置通知)正确使用注释@ AfterReturning:
@ AfterReturning(切入点=“执行(* it.mrwebmaster.aop.MyInterface.f2 (..))",返回=”RETVAL“)
公共无效afterReturningF2(对象RETVAL){
System.out.println(“RETURN F2”+ RETVAL);
}
此记录以下参数,除了切入点,给予对象的名称的,可以被看作是不二输入参数给定的方法返回。
在这种情况下,切入点表达式是inviarata除的方法,在这种情况下,F2的名称。
@ AfterThrowing(切入点=“执行(* it.mrwebmaster.aop.MyInterface.f3 (..))",投掷=”抛出“)
公共无效afterThrowingF3(Throwable的抛出){
System.out.println(“F3抛出”+抛出);
}
所不同的是,该方法不返回一个对象,但一个例外。
另一种意见类型总是后一种方法执行时,它是时间一般或抛出一个异常(后咨询)。 这建议是实现通过使用@后:
@后(“执行(* it.mrwebmaster.aop.MyInterface.f4 (..))")
公共无效afterF4(){
System.out.println(“后F4”);
}
最后,我们看到如何让周围的意见“:
@左右(“执行(* it.mrwebmaster.aop.MyInterface.f5 (..))")
公共无效aroundF5(PJP的proceed){
System.out.println(“之前F5”);
尝试{
对象RETVAL = pjp.proceed();
System.out.println(“RETURN F5”+ RETVAL);
}捕获(Throwable的E){
System.out.println(“F5抛出”+ E);
}
}
我们可以看到从切入点表达式代码是不能从其他不同的意见。
什么样的变化是相同的意见,必须明确调用通过类的proceed继续进行,一是它的应用程序作为输入传递方法,该方法的执行。
这个接口提供也使用进行检索方法参数,返回类型,并在该方法被执行对象的信息的其他方法。
这是留给读者任何更深。
为了测试我们的意见,我们能做的就是写一个接口MyInterface的琐碎的实施,并创建一个主要的测试:
MyInterfaceImpl {公共类实现MyInterface的
@覆盖
公共无效F1(){
System.out.println(“F1”);
}
@覆盖
公众诠释F2(){
System.out.println(“F2”);
返回0;
}
@覆盖
公众诠释F3()抛出异常{
System.out.println(“F3”);
抛出新的异常(“异常F3”);
}
@覆盖
公共无效F4()抛出异常{
System.out.println(“F4”);
}
@覆盖
公众诠释F5(){
System.out.println(“F5”);
返回0;
}
}
。nell'applicationContext XML:
< - !对象:对象 - > <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />主要测试:
公共类主要{
公共静态无效的主要(字串[] args){
/ **
* Instanz的IoC容器
* /
ApplicationContext中的ApplicationContext ClassPathXmlApplicationContext的=新的(“applicationContext.xml中”);
MyInterface的MyInterface的=(MyInterface的)applicationContext.getBean(“myInterfaceImpl”);
myInterface.f1();
System.out.println ("########## \ N“);
myInterface.f2();
System.out.println ("########## \ N“);
尝试{
myInterface.f3();
}赶上(例外五){}
System.out.println ("########## \ N“);
尝试{
myInterface.f4();
}赶上(例外五){}
System.out.println ("########## \ N“);
myInterface.f5();
System.out.println ("########## \ N“);
}
}
| |
Linux操作系统(课程)
完整指南开源系统。 从49€。 |
| |
PHP(课程)
全部课程用于创建动态Web站点。 从49€。 |
| |
Ruby和Ruby on Rails的(课程)
创建Ruby和RoR的软件和Web应用程序。 从39€。 |