Spring 2.0中 AOP的编程
2008-11-17 13:48
447 查看
Spring 2.0中 AOP的编程
[align=left]Spring 2.0中 AOP的编程:[/align][align=left]方式一:[/align][align=left]publicclass User {[/align][align=left] publicvoid method() {[/align][align=left] System.out.println("in method1");[/align][align=left] }[/align][align=left]}[/align][align=left]publicclass LogBean {[/align][align=left] public Object aroundLogCalls(ProceedingJoinPoint joinPoint) throws Throwable {[/align][align=left] System.out.println("before invoke method:"[/align][align=left] + joinPoint.getSignature().getName());[/align][align=left] Object object = joinPoint.proceed();[/align][align=left] System.out.println("after invoke method:"[/align][align=left] + joinPoint.getSignature().getName());[/align][align=left] return object;[/align][align=left] }[/align][align=left] [/align][align=left]}[/align][align=left]采用在xml配置aop:[/align][align=left]<?xml version="1.0" encoding="UTF-8"?>[/align][align=left]<beans xmlns="http://www.springframework.org/schema/beans"[/align][align=left] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"[/align][align=left] xmlns:aop="http://www.springframework.org/schema/aop"[/align][align=left] xsi:schemaLocation="[/align][align=left]http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd [/align][align=left] http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">[/align][align=left]<!-- 注意上面的四个地址用空格分开 --> [/align]<aop:config>[align=left] <!-- expression 表示要执行的匹配表达式,这里匹配所有的public方法,但是去除logger类的所有方法,防止无限调用-->[/align][align=left] [/align][align=left] <aop:pointcut id="loggableCalls"[/align][align=left] expression="execution(public * *(..)) "/>[/align][align=left] [/align][align=left] [/align][align=left] <aop:aspect id="logAspect" ref="logBean">[/align][align=left] <aop:around pointcut-ref="loggableCalls"[/align][align=left] method="aroundLogCalls" />[/align][align=left] </aop:aspect>[/align][align=left] [/align][align=left] </aop:config>[/align][align=left] <bean id="logBean" class="LogBean" />[/align][align=left] <bean id="user" class="User" />[/align][align=left]方式二:[/align][align=left]采用标注:[/align][align=left]@Aspect[/align][align=left]publicclass LogAspect {[/align][align=left] [/align][align=left] @Pointcut("execution(public * *(..))")[/align][align=left] publicvoid publicMethods() {[/align][align=left] }[/align][align=left] @Around("publicMethods()")[/align][align=left] public Object aroundLogCalls(ProceedingJoinPoint joinPoint)[/align][align=left] throws Throwable {[/align][align=left] System.out.println("before invoke method:"[/align][align=left] + joinPoint.getSignature().getName());[/align][align=left] Object object = joinPoint.proceed();[/align][align=left] System.out.println("after invoke method:"[/align][align=left] + joinPoint.getSignature().getName());[/align][align=left] return object;[/align][align=left] }[/align][align=left]}[/align][align=left]<?xml version="1.0" encoding="UTF-8"?>[/align][align=left]<beans xmlns="http://www.springframework.org/schema/beans"[/align][align=left] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"[/align][align=left] xmlns:aop="http://www.springframework.org/schema/aop"[/align][align=left] xsi:schemaLocation="[/align][align=left]http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd [/align][align=left] http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">[/align][align=left]<!-- 注意上面的四个地址用空格分开 -->[/align][align=left] [/align][align=left] <aop:aspectj-autoproxy />[/align][align=left] [/align][align=left] <!-- 或者使用以下定义[/align][align=left] [/align][align=left] <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />[/align][align=left] [/align][align=left] -->[/align][align=left] <bean id="logAspect" class="LogAspect" />[/align][align=left] <bean id="user" class="User" />[/align][align=left] [/align][align=left]</beans>[/align][align=left]这样配置文件就就只有一个<aop:aspectj-autoproxy />很简单。[/align][align=left]出现的问题解决:[/align][align=left]问题1:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.springframework.util.ClassUtils.<clinit>(ClassUtils.java:67) at org.springframework.core.io.DefaultResourceLoader.<init>(DefaultResourceLoader.java:52) at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:184) at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:80) at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:58) at [/align][align=left]需要加上:commons-logging.jar log4j-1.2.11.jar[/align][align=left] [/align]问题2:Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [text.xml]; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException[align=left]Caused by: java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException[/align] at java.lang.Class.forName0(Native Method) 需要加上:aspectjweaver.jar 问题3:Exception in thread "main" org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'logBean' defined in class path resource
[text.xml]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.[align=left]Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.[/align][align=left]需要加上:cglib-2.1.3.jar[/align][align=left] [/align][align=left] [/align]问题4:xception in thread "main" org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'logBean' defined in class path resource
[text.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type[align=left]Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type[/align][align=left] at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)[/align][align=left]需要加上:asm.jar[/align]
相关文章推荐
- spring 2.0 aop编程(一)
- Spring 2.0中 AOP的编程
- spring aop 2.0 编程
- spring aop 2.0 编程(三)
- spring aop 2.0 编程
- spring aop 2.0 编程
- spring aop 2.0 编程(二)一个实例
- spring aop 2.0 编程(二)一个实例
- Spring 2.0 AOP 与事务配置
- Spring之面向切面编程AOP(二)
- Spring 2.0 的AOP介绍及其通知类型
- AOP面向切编程及在Spring中的使用方法
- spring的AOP--面向切面编程
- spring6——AOP的编程术语
- 编程方式实现Spring的aop
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
- Spring第五篇【cglib、手动实现AOP编程】
- Spring AOP编程中--@aspect 标签,切面编程
- Spring面向切面编程AOP(around)
- Spring笔记——使用Spring进行面向切面(AOP)编程