Spring AOP 切入点问题

时间:2021-06-27 16:48:49
各位好!
请教个Spring AOP 切入点的问题

项目很简单,就用了Spring + SpringMVC + mybatis。

包名是:com.公司名.项目名.模块名.service.impl

在spring中配置事物用到AOP,

如果使用execution (* com.公司名.项目名..*.*(..))这样就运行正常

但配置为 execution (* com.公司名.项目名.*.service.*.*(..)) 这样就会报 JDBC Connection  will not be managed by Spring

要怎么样配置才能是切面只影响到service,而不影响到其他的controller,entity的方法呢?

感谢各位了!

6 个解决方案

#1


事务没开启?参考下http://blog.csdn.net/simon_1/article/details/51182117

#2


aop支持以什么开头或者以什么结尾的表达式配置。

#3


引用 1 楼 yigemaserwy 的回复:
事务没开启?参考下http://blog.csdn.net/simon_1/article/details/51182117

你好,我没有用注解标记事物,而是想用AOP切入所有的service走事物
<bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 定义方法的过滤规则 -->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="get*" read-only="true" />
            <tx:method name="list*" read-only="true" />
            <tx:method name="query*" read-only="true" />
            <tx:method name="find*" read-only="true" />
        </tx:attributes>
    </tx:advice>
   <aop:config>
        <!-- 定义一个切入点 -->
        <aop:pointcut
            expression="execution (* com.公司名.项目名..*.*(..))"
            id="services" />
        <!-- 对切入点和事务的通知,进行适配 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="services" />
    </aop:config>

#4


就是那样配的: Spring AOP 切入点问题

应该是你别的地方配错了,再检查一下

#5


感觉,没毛病啊

#6


引用 2 楼 fangmingshijie 的回复:
aop支持以什么开头或者以什么结尾的表达式配置。

你好,看spring的官方文档 http://docs.spring.io/spring/docs/4.2.7.RELEASE/spring-framework-reference/htmlsingle/#aop-pointcuts-examples可以用*.*的方式匹配任意class的任意方法

#1


事务没开启?参考下http://blog.csdn.net/simon_1/article/details/51182117

#2


aop支持以什么开头或者以什么结尾的表达式配置。

#3


引用 1 楼 yigemaserwy 的回复:
事务没开启?参考下http://blog.csdn.net/simon_1/article/details/51182117

你好,我没有用注解标记事物,而是想用AOP切入所有的service走事物
<bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 定义方法的过滤规则 -->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED"
                rollback-for="Exception" />
            <tx:method name="get*" read-only="true" />
            <tx:method name="list*" read-only="true" />
            <tx:method name="query*" read-only="true" />
            <tx:method name="find*" read-only="true" />
        </tx:attributes>
    </tx:advice>
   <aop:config>
        <!-- 定义一个切入点 -->
        <aop:pointcut
            expression="execution (* com.公司名.项目名..*.*(..))"
            id="services" />
        <!-- 对切入点和事务的通知,进行适配 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="services" />
    </aop:config>

#4


就是那样配的: Spring AOP 切入点问题

应该是你别的地方配错了,再检查一下

#5


感觉,没毛病啊

#6


引用 2 楼 fangmingshijie 的回复:
aop支持以什么开头或者以什么结尾的表达式配置。

你好,看spring的官方文档 http://docs.spring.io/spring/docs/4.2.7.RELEASE/spring-framework-reference/htmlsingle/#aop-pointcuts-examples可以用*.*的方式匹配任意class的任意方法