如果在执行通知时,切面依赖一个或多个类,我们可以在切面内部实例化这些协作的对象。但更好的方式是,借助Spring的依赖注入把bean装配到AspectJ期末中。
通常情况下,Spring bean由Spring容器初始化,但是Aspect切面是由AspectJ在运行期创建的。等到Spring有机会为Aspect注入bean时,Aspect已经被实例化了。
因为Spring不能负责创建Aspect,那就不能在Spring中简单地把创建的Aspect声明为一个bean。相反,我们需要一种方式为Spring获得已经由AspectJ创建的Aspect实例的句柄,从而可以注入bean。
幸好,所有的AspectJ切面都提供了一个静态的aspectOf()方法,该方法返回切面的一个单例。简而言之,Spring不能像之前那样使用< bean >声明来创建Aspect实例——它已经在运行时由AspectJ创建完成了。Spring需要通过aspectOf()工厂方法来获得切面的引用,然后像< bean >元素规定那样在该对象上执行依赖注入。
<bean class="...Aspect" factory-method="aspectOf">
<property name="xxxbean" ref="xxxbean" />
</bean>