Spring 3.1 が GA になった。最後に Spring を触ったのはこれを書いたときだから、もう2年近く前になるけど、こんときは 3.0 が出た頃だった。あんまり進んでなかったのかも。
いろいろググってみると、キャッシュがどうかしたとか書いてあるので、寝る前にちょっと試してみる。
package spring.trial1.ex1; import java.util.HashMap; import java.util.Map; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; class Bar { Map<Integer, String> map = new HashMap<>(); { map.put(1, "one"); map.put(2, "two"); } @Cacheable("bar") public String findString(int key) { System.out.printf("findString(%d) called%n", key); return map.get(key); } } public class Foo { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml"); Bar bean = ctx.getBean(Bar.class); System.out.println(bean.findString(1)); System.out.println(bean.findString(2)); System.out.println(bean.findString(3)); System.out.println(bean.findString(1)); System.out.println(bean.findString(2)); System.out.println(bean.findString(3)); } }
<?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:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <cache:annotation-driven /> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="bar" /> </set> </property> </bean> <bean id="bar" class="spring.trial1.ex1.Bar"/> </beans>pom.xml の dependency に spring-context 3.1.0.RELEASE と、cglib 2.2.2 を指定して、ビルド→実行したら、以下のような結果が得られる。 (既に Maven Central に入ってるらしく、特に repository を指定したり、ローカルリポジトリに入れたりとかしなくても、普通に 3.1 がダウンロードされる。)
findString(1) called one findString(2) called two findString(3) called null one two null
findString の 中身が呼ばれるのは最初だけで、2回め以降はキャッシュが使われているらしいのが分かる。
■ 雑感
JavaConfig/JSR-330 で xml を書かずに済むようになったと思ってたけど、この <cache:annotation-driven> に関しては、やり方が分からない。
仕方なく、昔ながらのapplicationContext.xml を書いてしまった。もしかすると、ちゃんとしたやり方があるのかもしれないけど、部分的にアノテーションで部分的にXMLみたいにマジでなるとしたら、結構イヤかも。
0 件のコメント:
コメントを投稿