Aspecj Cache 利用AspectJ的AOP模式来解决缓存方法内部调用

本方法适用于main()方法调用,但是web环境的解决方案应该差不多。

首先在spring-config.xml中加入如下代码:

    <context:load-time-weaver />
    <context:component-scan base-package="xin.uply.dao"/>
    <cache:annotation-driven cache-manager="cacheManager" mode="aspectj"/>
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
            <set>
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="defalut"/>
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="users"/>
            </set>
        </property>
    </bean>

注意<cache:annotation-driven cache-manager="cacheManager" mode="aspectj"/>中的mode属性。

然后在JVM configuration中加入:

-javaagent:E:\repo\org\springframework\spring-instrument\5.0.5.RELEASE\spring-instrument-5.0.5.RELEASE.jar

-javaagent:E:\repo\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar

记得要加两个。

最后在类路径下放/META-INF/aop.xml,如下:

<?xml version="1.0" encoding="UTF-8"?>
<aspectj>
    <weaver options="-verbose -showWeaveInfo">
        <include within="xin.uply.mixdao.UserService"/>
    </weaver>
</aspectj>

测试代码如下:


    public User getUserById2(String userId) {
        return getUserById(userId);
    }
    @Cacheable(cacheNames={"users"})
    public User getUserById(String userId) {
        System.out.println("real query user" + userId);
        return hibernateTemplate.get(User.class, userId);
    }

main方法调用:

public static void main(String[] args) throws IOException {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc-config.xml");
        UserService userService = (UserService)ctx.getBean("userService");
        System.out.println("1");
        userService.getUserById2("somebody");
        System.out.println("2");
        userService.getUserById2("somebody");

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值