在Spring中快速使用EHCache注解.docx

上传人:b****3 文档编号:26694112 上传时间:2023-06-21 格式:DOCX 页数:17 大小:98.05KB
下载 相关 举报
在Spring中快速使用EHCache注解.docx_第1页
第1页 / 共17页
在Spring中快速使用EHCache注解.docx_第2页
第2页 / 共17页
在Spring中快速使用EHCache注解.docx_第3页
第3页 / 共17页
在Spring中快速使用EHCache注解.docx_第4页
第4页 / 共17页
在Spring中快速使用EHCache注解.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

在Spring中快速使用EHCache注解.docx

《在Spring中快速使用EHCache注解.docx》由会员分享,可在线阅读,更多相关《在Spring中快速使用EHCache注解.docx(17页珍藏版)》请在冰豆网上搜索。

在Spring中快速使用EHCache注解.docx

在Spring中快速使用EHCache注解

在Spring中快速使用EHCache注解

作为一名Java开发人员你一定想知道如何在Spring应用中使用新的Ehcache注解功能;是吧?

ehcache-spring-annotatios是获得Apache认证的一个开源项目;它大大简化了在Spring应用中基于业界使用广泛的Ehacche-2.0版本实现缓存的技术,1.1.2版本的ehcache-spring-annotations刚刚发布不久,在本文中,我将会介绍如何在一个web工程时使用ehcache-spring-annotations实现缓存机制。

 

创建一个Web工程

     在本例中,我们将会创建一个基于SpringMVC的web工程,如果您使用的IDE是Eclipse的话请确保您安装了m2eclipse插件(译者注:

因为我们的工程基于Maven构建);接着创建一个基于JAVAEE5Web应用模型的Maven工程(groupid:

org.codehaus.mojo.archetypes,artifactid:

webapp-jee5)。

上述示例在Eclipse3.6下可以很好的运行。

工程结构

首先我创建了一个简单的web工程,项目中包含一个控制器:

MessageController:

1.@Controller  

2.public class MessageController {  

3.     @Autowired(required = true)  

4.     private MessageStorage messageStorage;  

5.     public MessageController(MessageStorage messageStorage) {  

6.          super();  

7.          this.messageStorage = messageStorage;  

8.     }  

9.     public MessageController() {  

10.     }  

11.     @RequestMapping(method = RequestMethod.GET, value = "/message/add")  

12.     public ModelAndView messageForm() {  

13.         return new ModelAndView("message-form", "command", new Message());  

14.     }  

15.     @RequestMapping(method = RequestMethod.POST, value = "/message/add")  

16.     public ModelAndView addMessage(@ModelAttribute Message message) {  

17.          messageStorage.addMessage(message);  

18.          return getMessageById(message.getId());  

19.     }  

20.     @RequestMapping(method = RequestMethod.GET, value = "/message/{id}")  

21.     public ModelAndView getMessageById(@PathVariable("id") long id) {  

22.         Message message = messageStorage.findMessage(id);  

23.         ModelAndView mav = new ModelAndView("message-details");  

24.         mav.addObject("message", message);  

25.         return mav;  

26.     }  

27.     @RequestMapping(method = RequestMethod.GET, value = "/message")  

28.     public ModelAndView getAllMessages() {  

29.     Collection messages = messageStorage.findAllMessages();  

30.         ModelAndView mav = new ModelAndView("messages");  

31.         mav.addObject("messages", new CollectionOfElements(messages));  

32.         return mav;  

33.     }  

34.}  

 

上面的控制器依赖于一个简单的DAO对象:

MessageStorage,其实现如下:

 

1.public interface MessageStorage {  

2.    Message findMessage(long id);  

3.    Collection findAllMessages();  

4.    void addMessage(Message message);  

5.    void setDelegate(MessageStorage storageDelegate);  

6.}  

 

 

MessageStorage接口的唯一实现类是MemoryMessageStorage:

1.@Component  

2.public class MemoryMessageStorage implements MessageStorage {  

3.      

4.    private Map messages;  

5.    private AtomicLong newID;  

6.      

7.    @PostConstruct  

8.    public void initialize() {  

9.        // add some messages  

10.        addMessage(new Message("user:

1", "content-1"));  

11.        addMessage(new Message("user:

2", "content-2"));  

12.        addMessage(new Message("user:

3", "content-3"));  

13.        addMessage(new Message("user:

4", "content-4"));  

14.        addMessage(new Message("user:

5", "content-5"));  

15.    }  

16.      

17.    @Override  

18.    @Cacheable(cacheName = "messageCache")  

19.    public Message findMessage(long id) {  

20.        //...  

21.    }  

22.    @Override  

23.    @Cacheable(cacheName = "messagesCache")  

24.    public Collection findAllMessages() {  

25.        //...  

26.    }  

27.    @Override  

28.    @TriggersRemove(cacheName = "messagesCache", when = When.AFTER_METHOD_INVOCATION, removeAll = true)  

29.    public void addMessage(Message message) {  

30.        //...  

31.    }  

32.}  

 

 

通过如下的所展示的必须的依赖配置之后我们就可以运行这个应用程序了(见下载选项获取完整的应用程序代码)

 

1.  

2.          

3.            javax.servlet  

4.            servlet-api  

5.            2.5  

6.            provided  

7.          

8.          

9.            javax.servlet.jsp  

10.            jsp-api  

11.            2.1  

12.            provided  

13.          

14.          

15.            junit  

16.            junit  

17.            4.8.1  

18.            test  

19.          

20.          

21.            org.springframework  

22.            spring-webmvc  

23.            3.0.3.RELEASE  

24.            jar  

25.            compile  

26.          

27.          

28.            org.springframework  

29.            spring-oxm  

30.            3.0.3.RELEASE  

31.            jar  

32.            compile  

33.          

34.          

35.            javax.servlet  

36.            jstl  

37.            1.2  

38.            jar  

39.            compile  

40.          

41.      

 

 

介绍基于Spring的web工程中使用Ehcache注解

现在该给项目增加缓存能力了,我们要为MemoryMessageStorage类提供缓存机制。

首先,在POM文件中加入所需的依赖:

Spring中Ehcache的注解依赖项:

1.  

2.    com.googlecode.ehcache-spring-annotations  

3.    ehcache-spring-annotations  

4.    1.1.2  

5.    jar  

6.    compile  

7.  

 

 

在写本文的时候2.2.0版本的Ehcache也可用了,但是我们使用2.1.0版本的Ehcache,因为EhcacheAnnotationsforSpring1.1.2版本是基于2.1.0版本的Ehcache的。

我还填加了SLF4J API实现的依赖(译者注:

SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。

按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

):

1.  

2.     org.slf4j  

3.     slf4j-log4j12  

4.     1.6.1  

5.     jar  

6.     compile  

7.  

 

 

通过上面依赖的配置,我们就可以使用EhcacheAnnotationsforSpring了,我们现在就如同前面所说的给MemoryMessageStorage添加注解。

这里列出几条所需达到的目标:

 

·         当调用findMessage(long)方法时用名为“messageCache”的名称缓存结果信息。

·         当调用findAllMessages()方法时用名为“messagesCache”的名称缓存结果信息。

·         当调用addMessage(Message)方法时清除所有“messagesCache”名称下的缓存项。

为了达到上面所说的几个目标,我们使用 @Cachable和@TriggersRemove两个注解,见下面介绍:

1.@Component  

2.public class MemoryMessageStorage implements MessageStorage {  

3.    private Map messages;  

4.    private AtomicLong newID;  

5.    public MemoryMessageStorage() {  

6.        // ...  

7.    }  

8.    @Override  

9.    @Cacheable(cacheName = "messageCache")  

10.    public Message findMessage(long id) {  

11.        // ...  

12.    }  

13.    @Override  

14.    @Cacheable(cacheName = "messagesCache")  

15.         public Collection findAllMessages() {  

16.         // ...  

17.    }  

18.    @Override  

19.    @TriggersRemove(cacheName = "messagesCache", when = When.AFTER_METHOD_INVOCATION, removeAll = true)  

20.        public void addMessage(Message message) {  

21.            // ...  

22.    }  

23.}  

 

 

Spring和Ehcache的配置

注解已经加到位了,接下来我们需要配置这个项目去使它们起作用,通过Spring的配置文件就可以达到这个目的:

1.

xml version="1.0" encoding="UTF-8"?

>  

2.

//.springframework.org/schema/beans"  

3.       xmlns:

xsi=":

//.w3.org/2001/XMLSchema-instance"  

4.    xmlns:

context=":

//.springframework.org/schema/context"  

5.       xmlns:

oxm=":

//.springframework.org/schema/oxm"  

6.    xmlns:

mvc=":

//.springframework.org/schema/mvc"  

7.       xmlns:

ehcache=":

//ehcache-spring-  

8.    xsi:

schemaLocation=":

//.springframework.org/schema/beans :

//.springframework.org/schema/beans/spring-beans-3.0.xsd  

9.       :

//.springframework.org/schema/context :

//.springframework.org/schema/context/spring-context-3.0.xsd  

10.       :

//.springframework.org/schema/oxm :

//.springframework.org/schema/oxm/spring-oxm-3.0.xsd  

11.       :

//.springframework.org/schema/mvc :

//.springframework.org/schema/mvc/spring-mvc-3.0.xsd  

12.        :

//ehcache-spring- :

//ehcache-spring-  

13.    

annotation-driven />  

14.    

config cache-manager="cacheManager">  

15.        

evict-expired-elements interval="60" />  

16.    

config>  

17.      

18.    

-- rest of the file omitted -->  

19.  

 

最后要做的是添加Ehcache的配置文件,在web应用程序的/WEB-INF目录下面创建ehcache.xml的xml文件:

1.

xml version="1.0" encoding="UTF-8"?

>  

2.

xsi=":

//.w3.org/2001/XMLSchema-instance" xsi:

noNamespaceSchemaLocation=":

//ehcache.org/ehcache.xsd">  

3.      

4.      

5.      

6.  

 

 

接下来需要配置缓存manager使它去管理Ehcache的配置,在Spring上下文的配置文件中加入cacheManager 这个Bean的配置,并需要在其中加入configLocation属性:

1.  

2.       

3.  

 

 

配置完毕,在Tomcat6应用服务器上运行该应用程序(RunAs–Runonserver),你会发现有日志输出-如果DEBUG模式被允许的话你会发现类似如下的条目输出:

1.DEBUG [net.sf.ehcache.Cache]:

 Initialised cache:

 messagesCache

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1