Spring 2.0
中
AOP
的编程:
方式一:
public
class
User {
public
void
method
() {
System.
out
.println(
"in method1"
);
}
}
public
class
LogBean {
public
Object aroundLogCalls(ProceedingJoinPoint joinPoint)
throws
Throwable {
System.
out
.println(
"before invoke method:"
+ joinPoint.getSignature().getName());
Object object = joinPoint.proceed();
System.
out
.println(
"after invoke method:"
+ joinPoint.getSignature().getName());
return
object;
}
}
采用在
xml
配置
aop:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop
=
"http://www.springframework.org/schema/aop"
xsi:schemaLocation
=
"
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
>
<!--
注意上面的四个地址用空格分开
-->
<
aop:config
>
<!-- expression
表示要执行的匹配表达式,这里匹配所有的
public
方法,但是去除
logger
类的所有方法,防止无限调用
-->
<
aop:pointcut
id
=
"loggableCalls"
expression
=
"execution(public * *(..)) "
/>
<
aop:aspect
id
=
"logAspect"
ref
=
"logBean"
>
<
aop:around
pointcut-ref
=
"loggableCalls"
method
=
"aroundLogCalls"
/>
</
aop:aspect
>
</
aop:config
>
<
bean
id
=
"logBean"
class
=
"LogBean"
/>
<
bean
id
=
"user"
class
=
"User"
/>
方式二:
采用标注:
@Aspect
public
class
LogAspect {
@Pointcut
(
"execution(public * *(..))"
)
public
void
publicMethods
() {
}
@Around
(
"publicMethods()"
)
public
Object aroundLogCalls(ProceedingJoinPoint joinPoint)
throws
Throwable {
System.
out
.println(
"before invoke method:"
+ joinPoint.getSignature().getName());
Object object = joinPoint.proceed();
System.
out
.println(
"after invoke method:"
+ joinPoint.getSignature().getName());
return
object;
}
}
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop
=
"http://www.springframework.org/schema/aop"
xsi:schemaLocation
=
"
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
>
<!--
注意上面的四个地址用空格分开
-->
<
aop:aspectj-autoproxy
/>
<!--
或者使用以下定义
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
-->
<
bean
id
=
"logAspect"
class
=
"LogAspect"
/>
<
bean
id
=
"user"
class
=
"User"
/>
</
beans
>
这样配置文件就就只有一个
<
aop:aspectj-autoproxy
/>
很简单。
出现的问题解决:
问题
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
需要加上:
commons-logging.jar log4j-1.2.11.jar
问题
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
Caused by: java.lang.NoClassDefFoundError:
org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
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.
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.
需要加上:
cglib-2.1.3.jar
问题
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
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/Type
at net.sf.cglib.core.TypeUtils.parseType(
TypeUtils.java:180
)
需要加上:
asm.jar
分享到:
相关推荐
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。Spring 2.0引入了基于注解的AOP配置,极大地简化了AOP的使用。这篇...
Spring 2.0 是一个里程碑式的版本,它在Java企业级开发中扮演着核心角色,为开发者提供了丰富的功能和灵活性。这份全中文的Spring 2.0技术文档是学习和理解这一版本的重要参考资料,旨在帮助中国开发者更好地掌握...
Spring 2.0 是一个非常重要的Java框架,它在企业级应用开发中占据了核心地位,尤其是在基于Java的轻量级应用程序上下文(IoC)和面向切面编程(AOP)方面。本手册和使用指南提供了全面的Spring 2.0相关知识,包括其...
本实例将探讨Spring 2.0版本中如何利用AOP(面向切面编程)来实现横切关注点的解耦。AOP是Spring框架的一个重要特性,它允许我们编写与业务逻辑无关的代码,如日志、事务管理、性能监控等,并在适当的时候自动插入到...
Spring 2.0是Spring框架的一个重要版本,它在Java企业级应用开发中扮演着核心角色。本教程将深入探讨...文档`spring2.0-reference_final_zh_cn.chm`将详细阐述这些概念和技术,帮助你成为一名熟练的Spring开发者。
1. **AOP(面向切面编程)增强**:Spring 2.0 提供了更强大的面向切面编程支持,允许开发者定义更复杂的切面,包括基于注解的切点表达式和更多的通知类型。这使得代码更加整洁,业务逻辑与系统服务(如事务管理)...
2. **AOP(面向切面编程)**:Spring 2.0提供了更强大的面向切面编程支持,使得开发者可以将关注点分离,如日志、事务管理等,从而降低代码复杂性。AOP代理包括JDK动态代理和CGLIB代理,允许开发者定义切入点和通知...
另一个重要特性是AOP(面向切面编程),Spring的AOP模块允许开发者定义横切关注点,如日志记录、事务管理等,这些关注点可以被编织到业务逻辑中,提高代码的可维护性和复用性。Spring 2.0提供了基于注解的AOP支持,...
手册详细介绍了如何利用Spring来构建高效、可维护的软件系统,包括了Spring的IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)面向切面编程、数据访问、Web应用以及更多实用功能。 首先,...
其次,Spring 2.0在面向切面编程(Aspect-Oriented Programming,AOP)方面也有所提升。AOP允许开发者将横切关注点,如日志、事务管理等,从业务逻辑中分离出来,提高代码的可重用性和可维护性。2.0版本增加了更多的...
通过《Spring2.0宝典》的源代码,学习者可以逐步探索上述功能的实际运用,了解每个特性在项目中的实现方式,从而提升对Spring框架的理解和使用能力。在阅读源代码的过程中,建议结合书中的讲解,按照章节顺序逐步...
以下将详细阐述Spring 2.0中的关键知识点: 一、依赖注入(Dependency Injection,DI) 依赖注入是Spring的核心特性之一,它允许开发者通过配置文件或注解来管理对象间的依赖关系,而非硬编码在类内部。Spring 2.0...
Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用,它通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等原则,简化了应用的构建和管理。...
总结来说,Spring 2.0是Java开发中的重要里程碑,它的依赖注入、面向切面编程、MVC框架以及对其他技术的集成,如Struts和Hibernate,极大地提升了开发效率和应用质量。配合Eclipse这样的强大IDE,开发者可以更加高效...
Spring框架以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的核心特性,成为了Java EE领域中的主流框架之一。 在Spring 2.0中,以下几个关键知识点值得深入探讨: 1...
Spring 2.0是Java开发中的一个里程碑,它在企业级应用开发中扮演着至关重要的角色,特别是对于依赖注入(IoC)和面向切面编程(AOP)的支持。本学习提纲旨在为初学者提供一份详尽的Spring 2.0学习指南,帮助他们系统...
通过提供依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),Spring能够帮助开发者管理对象之间的关系,实现解耦和模块化。 2. **依赖注入**: 依赖注入是Spring的核心...