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");

}


阅读更多
个人分类: spring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭