`

Spring配置文件里如何同时配置Spel表达和AOP

 
阅读更多
Spring配置文件里如何同时配置Spel表达和AOP

原文地址:http://blog.csdn.net/gxlstone/article/details/12955063

[size=small][size=small]你的程序应该报如下错误了吧,否则你了不会来这看我看这破玩意!
注意红色文字,我们来猜它的大概意思,毕竟英语不是很好嘛(好吧,根本就不好!)。
在类型为'$Proxy4'的对象上找不到song属性。
越过如下这段错误堆栈,让我们继续看后面的汉字。
[/size][/size]

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 6): Field or property 'song' cannot be found on object of type '$Proxy4'
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:207)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:71)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:88)
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:138)
... 19 more
在没有下面黄色代码时,我的程序跑的好好的,自从加了黄色代码,程序就像屎一样了:报错。
把如下红色代码删除的话,程序也好了。
难道红黄真的不能共存吗?当然不是,至少肛裂时,红黄就共存了,大笑
报错的原因到底是什么呢?
原来Sprig AOP默认情况下创建的代理是基于接口的,所以类的属性是不能通过代理来访问的,这就是为什么前面报这样的错了:Field or property 'song' cannot be found on object of type '$Proxy4'
那怎样创建出来的代理才能访问类的属性呢?当然是基于类的啦!
<bean id="kenny" class="com.springinaction.springidol.Instrumentalist"
  p:song="Jingle Bells" p:instrument-ref="piano">
  <constructor-arg value="kenny" />
</bean>
<bean id="carl" class="com.springinaction.springidol.Instrumentalist">
  <constructor-arg value="carl" />
  <property name="song" value="#{kenny.song}" />
  <property name="instrument" value="#{kenny.getInstrument()}" />
</bean>
<bean id="audience" class="com.springinaction.springidol.Audience" />

<aop:config>
  <aop:aspect ref="audience">
   <aop:pointcut id="performance"
    expression="execution(* com.springinaction.springidol.Performer.perform(..))" />
   <aop:before pointcut-ref="performance" method="takeSeats" />
   <aop:before pointcut-ref="performance" method="turnOffCellPhones" />
   <aop:after-returning pointcut-ref="performance"
    method="applaud" />
   <aop:after-throwing pointcut-ref="performance"
    method="demandRefund" />
  </aop:aspect>
</aop:config>

看下面的代码,尤其是红字部分。这样声明一样,就会创建基于类的动态代码了,就可以访问类的属性了。
本文中的错误也就解决了。
<aop:config proxy-target-class="true">
...
</aop:config>

如下错误信息好多吧,我们不看,只看上面就行
分享到:
评论

相关推荐

    spring aop依赖jar包

    - `spring-beans.jar`:Spring Bean容器的实现,提供了Bean的定义、实例化、配置和管理等功能,AOP需要它来处理对象的生命周期。 - `spring-core.jar`:Spring的核心库,提供了基本的IoC(Inversion of Control,...

    Spring4 jar包和Spring配置文件

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心在于IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...深入学习Spring4的jar包和配置文件,将使你更好地驾驭Java开发环境,提高软件工程能力。

    spring aop的jar包

    5. **org.springframework.aop-3.0.5.RELEASE.jar**:这个文件是Spring AOP的核心实现,提供了切面、通知、代理等AOP概念的实现,以及AOP配置和解析的支持。 6. **org.springframework.expression-3.0.5.RELEASE....

    spring aop用到jar包.rar

    如果涉及到XML配置,`spring-expression.jar`(Spring表达式语言,SpEL)也可能包含在内,它允许在配置中进行复杂的条件判断和对象操作。 总的来说,这个压缩文件"spring aop用到jar包.rar"包含了实现Spring AOP所需...

    spring aop所需jar包

    - XML配置:在Spring配置文件中定义切面、通知和切入点。 - 注解配置:使用`@EnableAspectJAutoProxy`开启基于注解的AOP支持,并在类上使用`@Aspect`定义切面。 - 自动代理:Spring会根据配置自动生成代理对象,...

    spring3.1相关配置文件

    在这个压缩包中,我们很可能会找到与Spring 3.1配置相关的各种文件,如XML配置文件、Java配置类以及相关文档。 1. **Spring核心**:Spring的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程...

    spring-aop和注解的实例

    在`spring-aop`的压缩包文件中,你可能会找到包含这些概念的实例代码,包括如何创建切面、定义通知、设置切入点以及如何在Spring配置中启用AOP代理。这些实例可以帮助你更好地理解和应用Spring AOP,提高代码的可...

    Spring-AOP-JDK动态代理

    6. **使用代理对象**:Spring会自动创建并返回代理对象,当通过代理对象调用方法时,Spring会根据配置的切面和通知执行相应的逻辑。 在实际开发中,结合Maven构建工具,我们可以轻松地将Spring AOP集成到项目中。...

    spring spEL 表达式详解

    在Spring框架中,SpEL被广泛应用于配置文件、注解以及AOP(面向切面编程)中,使得动态数据绑定和复杂逻辑判断变得简单易行。下面我们将深入探讨SpEL的主要特性和用法。 1. **基础语法** - 属性访问:`#{T...

    Spring_SpEl表达式使用用例

    综上所述,Spring SpEL表达式为开发者提供了强大的表达能力,使得在运行时可以更加灵活地控制和操作对象。通过理解和熟练运用SpEL,我们可以编写出更具有弹性的Spring应用程序。在实际项目中,应根据需求选择合适的...

    Spring AOP 常用的四种实现方式的代码

    在Spring的配置文件中,可以定义`&lt;aop:config&gt;`、`&lt;aop:aspect&gt;`、`&lt;aop:pointcut&gt;`等元素来声明切面、切入点和通知。 在实际开发中,选择哪种实现方式取决于项目需求和目标对象的特点。接口代理和注解方式通常更易...

    Spring3.1 IOC+AOP需要的jar包

    例如,`org.springframework.beans.factory.xml.XmlBeanFactory`用于解析XML配置文件,创建bean实例;而`@Autowired`注解则用于自动装配bean的依赖。 **面向切面编程(AOP)**: AOP是Spring框架的另一大特色,它...

    spring security 2.0 的简单配置使用(补)——用aop控制method级权限

    在Spring Security 2.0中,我们需要在Spring配置文件中声明必要的bean,如`http`、`authentication-manager`和`access-decision-manager`。`http`配置定义了请求过滤规则,`authentication-manager`负责用户认证,`...

    spring-boot-annotation-spel.zip

    SPEL是Spring框架提供的一种强大的表达式语言,用于在运行时查询和操作对象图。它允许我们执行各种操作,如属性访问、方法调用、条件语句、循环等,甚至可以执行计算和类型转换。在自定义注解中使用SPEL,我们可以...

    SpringXML方式实现AOP demo

    在XML配置文件中,我们使用`&lt;aop:pointcut&gt;`标签定义切点,通常结合Spring的表达式语言(SpEL)或AspectJ的切点表达式。例如,`execution(* com.example.service.*.*(..))`表示匹配`com.example.service`包下的所有...

    day38 13-Spring的Bean的属性的注入:SpEL注入

    同时,它与Spring的其他特性,如AOP(面向切面编程)和Bean的生命周期管理,无缝集成,提供了高度灵活和强大的依赖注入解决方案。 在实际开发中,结合`@ConfigurationProperties`和SpEL,我们可以实现更高级的配置...

    较为传统的Spring配置的jar包 lib.zip

    总之,"较为传统的Spring配置的jar包 - lib.zip" 是为了搭建和运行基于Spring早期版本的Java应用程序,其中包含的库文件覆盖了Spring的主要功能,如IoC、AOP、数据库访问和Web支持。虽然现代Spring推荐使用更简洁的...

    Spring及AOP应用(事务与集成)

    - 引入Spring表达式语言(SpEL),增强了配置文件的灵活性。 - 支持使用Java代码和注解进行元数据配置。 - 增加了对象到XML的映射功能(OXM),方便处理XML数据。 - 提供了全面的REST支持,包括客户端和服务端的实现...

    spring-framework-4.2.4 所有jar包和xsd文件

    1. `beans.xsd`:定义了Spring配置文件中bean元素的结构,用于声明和配置bean。 2. `context.xsd`:扩展了beans.xsd,引入了更多与上下文相关的元素,如property-placeholder和message-source。 3. `aop.xsd`:定义...

    spring aop

    1. **配置文件**:在Spring的XML配置文件中声明切面,定义切点和通知。例如,使用`&lt;aop:config&gt;`标签来定义切面,`&lt;aop:pointcut&gt;`定义切点,`&lt;aop:advisor&gt;`或`&lt;aop:aspect&gt;`定义通知。 2. **切面类(Aspect)**:...

Global site tag (gtag.js) - Google Analytics