在AOP术语中,实行点被称为连接点。这些点的凑集称为切入点,在连接点之前、之后或“周围”实行的新行为称为关照。你可以在Introduction部分阅读更多关于AOP的内容。
安装AOP框架可以与composer一起安装。安装非常大略
Step 1 利用composer下载库
请composer下载最新版本的Go!
AOP框架及其依赖项,运行以下命令:
composer require goaop/framework
Composer会将框架安装到项目的 vendor/goaop/framework 目录中。
Step 2 创建运用程序切面内核
这个框架的目的是为您的运用程序供应大略的AOP集成。你必须首先为你的运用程序创建 AspectKernel 类。这个类将在一个地方管理运用程序的所有方面。
该框架供应了基类,使创建自己的内核变得更随意马虎。要创建运用程序内核,请扩展抽象类 Go\Core\AspectKernel
<?php// app/ApplicationAspectKernel.phpuse Go\Core\AspectKernel;use Go\Core\AspectContainer;/ Application Aspect Kernel /class ApplicationAspectKernel extends AspectKernel{ / Configure an AspectContainer with advisors, aspects and pointcuts @param AspectContainer $container @return void / protected function configureAop(AspectContainer $container) { }}
Step 3 在前端掌握器中配置aspect内核
要配置方面内核,请调用内核实例的 init() 方法。
// front-controller, for Symfony2 application it's web/app_dev.phpinclude __DIR__ . '/vendor/autoload.php'; // use composer// Initialize an application aspect container$applicationAspectKernel = ApplicationAspectKernel::getInstance();$applicationAspectKernel->init([ 'debug' => true, // use 'false' for production mode 'appDir' => __DIR__ . '/..', // Application root directory 'cacheDir' => __DIR__ . '/path/to/cache/for/aop', // Cache directory // Include paths restricts the directories where aspects should be applied, or empty for all source files 'includePaths' => [ __DIR__ . '/../src/' ]]);
Step 4 创建一个方面
方面是AOP哲学的关键元素。走!
AOP框架只利用大略的PHP类来声明方面,这使得面向工具的所有特性都可以用于方面类。作为一个例子,让我们截取所有的方法并显示它们的名称:
// Aspect/MonitorAspect.phpnamespace Aspect;use Go\Aop\Aspect;use Go\Aop\Intercept\FieldAccess;use Go\Aop\Intercept\MethodInvocation;use Go\Lang\Annotation\After;use Go\Lang\Annotation\Before;use Go\Lang\Annotation\Around;use Go\Lang\Annotation\Pointcut;/ Monitor aspect /class MonitorAspect implements Aspect{ / Method that will be called before real method @param MethodInvocation $invocation Invocation @Before("execution(public Example->())") / public function beforeMethodExecution(MethodInvocation $invocation) { echo 'Calling Before Interceptor for: ', $invocation, ' with arguments: ', json_encode($invocation->getArguments()), "<br>\n"; }}
很大略,不是吗?我们在这里声明,我们希望在实行Example类中的所有动态公共方法之前安装一个钩子。这是在注释#0的帮助下完成的#钩子可以是任何类型,你稍后会看到它们。但是我们不改变类Example中的任何代码!
我能感想熏染到你的惊异。
Step 5 在方面内核中注册方面
要注册aspect,只需在内核的 configureAop() 方法中添加它的实例:
// app/ApplicationAspectKernel.phpuse Aspect\MonitorAspect;//... protected function configureAop(AspectContainer $container) { $container->registerAspect(new MonitorAspect()); }//...
Step 6 可选配置
默认情形下,Go!
AOP利用 Doctrine\Common\Cache\FilesystemCache 来缓存注释。但是,如果您须要利用任何其他缓存引擎进行注释,您可以通过运用程序方面内核的 annotationCache 配置选项配置缓存驱动程序。唯一的哀求是缓存驱动程序实现 Doctrine\Common\Cache\Cache 接口。
这在支配到只读文件系统时非常有用。在这种情形下,你可以利用,例如: Doctrine\Common\Cache\ArrayCache 或一些基于内存的缓存驱动程序。