您的位置:首页 > 其它

选择虚拟终端服务器的几大理由

2012-11-26 11:24 218 查看
此文章为转自他人博客
定义数据访问接口:

01
package
 
org.kevin.cache.dao;

02
03
import
 
java.util.Collection;

04
05
import
 
org.kevin.cache.domain.Data;

06
07
public
 
interface
 
DataDAO {

08
09
    
public
 
void
 
add(Data data);

10
11
    
public
 
void
 
update(Data data);

12
13
    
public
 
Data find(Integer id);

14
15
    
public
 
void
 
delete(Integer id);

16
    
 
17
    
public
 
Collection<Data> getAll();

18
}
对接口方法进行实现,使用Map模拟数据库的表进行存储数据:

01
package
 
org.kevin.cache.dao;

02
03
import
 
java.util.Collection;

04
import
 
java.util.HashMap;

05
import
 
java.util.Map;

06
07
import
 
org.kevin.cache.domain.Data;

08
import
 
org.springframework.cache.annotation.CacheEvict;

09
import
 
org.springframework.cache.annotation.Cacheable;

10
11
public
 
class
 
DataDAOImpl 
implements
 
DataDAO {

12
13
    
private
 
Map<Integer, Data> dataMap = 
new
 
HashMap<>();

14
15
    
@Override

16
    
@CacheEvict
(value = 
"data"
, allEntries = 
true
)

17
    
public
 
void
 
add(Data data) {

18
        
System.out.println(
"Execute:public void add(Data data)"
);

19
        
dataMap.put(data.getId(), data);

20
    
}

21
22
    
@Override

23
    
@CacheEvict
(value = 
"data"
, allEntries = 
true
)

24
    
public
 
void
 
update(Data data) {

25
        
System.out.println(
"Execute:public void update(Data data) "
);

26
        
dataMap.put(data.getId(), data);

27
    
}

28
29
    
@Override

30
    
@Cacheable
(value = 
"data"
)

31
    
public
 
Data find(Integer id) {

32
        
System.out.println(
"Execute:public Data find(Integer id)"
);

33
        
return
 
dataMap.get(id);

34
    
}

35
36
    
@Override

37
    
@CacheEvict
(value = 
"data"
, allEntries = 
true
)

38
    
public
 
void
 
delete(Integer id) {

39
        
System.out.println(
"Execute:public void delete(Integer id)"
);

40
        
dataMap.remove(id);

41
    
}

42
43
    
@Override

44
    
@Cacheable
(value = 
"data"
)

45
    
public
 
Collection<Data> getAll() {

46
        
System.out.println(
"Execute:public Collection<Data> getAll()"
);

47
        
return
 
dataMap.values();

48
    
}

49
}
如上,对数据进行增删改的时候清空缓存,查询时使用缓存。其中value为缓存区,allEntries表示清空缓存区中的所有数据。为了稍后验证缓存是否生效,打印出执行的方法签名。
定义领域模型:

01
package
 
org.kevin.cache.domain;

02
03
public
 
class
 
Data {

04
05
    
private
 
Integer id;

06
    
private
 
String first;

07
    
private
 
String second;

08
09
    
public
 
Data(Integer id, String first, String second) {

10
        
this
.id = id;

11
        
this
.first = first;

12
        
this
.second = second;

13
    
}

14
15
    
public
 
String getFirst() {

16
        
return
 
first;

17
    
}

18
19
    
public
 
void
 
setFirst(String first) {

20
        
this
.first = first;

21
    
}

22
23
    
public
 
String getSecond() {

24
        
return
 
second;

25
    
}

26
27
    
public
 
void
 
setSecond(String second) {

28
        
this
.second = second;

29
    
}

30
31
    
public
 
void
 
setId(Integer id) {

32
        
this
.id = id;

33
    
}

34
35
    
public
 
Integer getId() {

36
        
return
 
id;

37
    
}

38
}
接下来编写spring配置文件:

01
<
beans
 
xmlns
=
"http://www.springframework.org/schema/beans"

02
    
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:p
=
"http://www.springframework.org/schema/p"

03
     
xmlns:cache
=
"http://www.springframework.org/schema/cache"

04
    
xsi:schemaLocation="

05
            
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd[/code] 
06
            
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">[/code] 
07
08
    
<
cache:annotation-driven
 
/>

09
    
 
10
    
<
bean
 
id
=
"cacheManager"
class
=
"org.springframework.cache.support.SimpleCacheManager"
>

11
        
<
property
 
name
=
"caches"
>

12
            
<
set
>

13
                
<
bean
class
=
"org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name
=
"default"
 
/>

14
                
<
bean
class
=
"org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
p:name
=
"data"
 
/>

15
            
</
set
>

16
        
</
property
>

17
    
</
bean
>

18
19
    
<
bean
 
id
=
"dataDao"
 
class
=
"org.kevin.cache.dao.DataDAOImpl"
 
/>

20
</
beans
>

最后编写main方法验证缓存是否生效:

01
package
 
org.kevin.cache;

02
03
import
 
java.util.Collection;

04
05
import
 
org.kevin.cache.dao.DataDAO;

06
import
 
org.kevin.cache.domain.Data;

07
import
 
org.springframework.context.support.ClassPathXmlApplicationContext;

08
09
public
 
class
 
CacheMain {

10
11
    
public
 
static
 
void
 
main(String[] args) {

12
        
 
13
        
ClassPathXmlApplicationContext context = 
new
ClassPathXmlApplicationContext(
"spring-cache-demo.xml"
);

14
        
DataDAO dataDAO = context.getBean(
"dataDao"
, DataDAO.
class
);

15
        
 
16
        
dataDAO.add(
new
 
Data(
1
"li"
"wenkai"
));

17
        
Collection<Data> dataCollection = dataDAO.getAll();

18
        
System.out.println(dataCollection.size());

19
        
 
20
        
System.out.println(
"================================="
);

21
        
 
22
        
dataDAO.add(
new
 
Data(
2
"jack"
"lee"
));

23
        
dataCollection = dataDAO.getAll();

24
        
System.out.println(dataCollection.size());;

25
        
Data data = dataDAO.find(
1
);

26
        
System.out.println(data.getFirst());

27
        
data = dataDAO.find(
2
);

28
        
System.out.println(data.getFirst());

29
        
data = dataDAO.find(
2
);

30
        
System.out.println(data.getFirst());;

31
        
 
32
        
System.out.println(
"===================================="
);

33
        
dataDAO.add(
new
 
Data(
3
"kevin"
"lee"
));

34
        
data = dataDAO.find(
2
);

35
        
System.out.println(data.getFirst());

36
        
data = dataDAO.find(
3
);

37
        
System.out.println(data.getFirst());

38
        
data = dataDAO.find(
2
);

39
        
System.out.println(data.getFirst());

40
    
}

41
}
打印接过如下,表示已经生效:

01
Execute:public void add(Data data)
02
Execute:public Collection<
Data
> getAll()

03
1
04
=================================
05
Execute:public void add(Data data)
06
Execute:public Collection<
Data
> getAll()

07
2
08
Execute:public Data find(Integer id)
09
li
10
Execute:public Data find(Integer id)
11
jack
12
jack
13
====================================
14
Execute:public void add(Data data)
15
Execute:public Data find(Integer id)
16
jack
17
Execute:public Data find(Integer id)
18
kevin
19
jack
 
最后,spring支持的缓存机制,是方法级的缓存,而不关注底层是否使用了数据库以及通过什么方式访问的数据库;因此这种缓存不止可以放到DAO层,也可以放置到Service层,甚至可以对各种代码数据进行缓存。
如果应用中同时使用了Hibernate和Ibatis,或者这种方式是一种好的缓存解决方案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: