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中定义的方法。