SpringAOP与AspectJ的介绍

我是SpringAOP的新手。 我想写一些简单的介绍示例,但无法清楚地了解它必须如何工作。

在文档中我发现:

简介:代表类型声明其他方法或字段。 Spring AOP允许您向任何建议的对象引入新接口(和相应的实现)。 例如,您可以使用简介使bean实现IsModified接口,以简化缓存。 (引言在AspectJ社区中称为类型间声明。)

我写了一个简单的例子:我用一个方法编写简单的类

public class Test { public void test1(){ System.out.println("Test1"); } } 

然后我编写实现此接口的接口和类

 public interface ITest2 { void test2(); } public class Test2Impl implements ITest2{ @Override public void test2() { System.out.println("Test2"); } } 

最后我的方面

 @Aspect public class AspectClass { @DeclareParents( value = "by.bulgak.test.Test+", defaultImpl = Test2Impl.class ) public static ITest2 test2; } 

我的spring配置文件如下所示:

   

所以我的问题是:我现在怎么能这样呢。 我需要在我的主要课程中写到海上结果? 可能我需要写一些其他类。(我在其中读到有关SpringAOP的书,我找不到完整的例子)

UPDATE

我的主要方法如下:

 public static void main(String[] args) { ApplicationContext appContext = new ClassPathXmlApplicationContext("spring-configuration.xml"); Test test = (Test) appContext.getBean("test"); test.test1(); ITest2 test2 = (ITest2) appContext.getBean("test"); test2.test2(); } 

当我执行我的应用程序时,我收到此错误:

 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy5 cannot be cast to by.bulgak.test.Test 

在这一行:

 Test test = (Test) appContext.getBean("test"); 

首先,您需要在配置文件中定义bean Test

  

然后在main中,从ApplicationContext获取这个bean:

 Test test1 = (Test) context.getBean("test"); 

现在,从test1引用,您只能调用Test bean中定义的方法。 要使用新引入的行为,您需要对包含该行为的接口进行类型转换:

 ITest2 test2 = (ITest2) context.getBean("test"); 

然后,您可以从此引用访问Test2的方法:

 test2.test2(); 

这将调用在@DeclareParents注释的defaultImpl属性中指定的bean中定义的方法。