spring3 基于注解的ehcache配置 为什么需要给每一个dao加一个接口呢?
在使用ehcache进行注解配置时,我发现直接给一个实现了的dao例如 SodUserDao类添加 注解在controller层会报错。
如果给SodUserDao 添加一个接口 然后再配置就不会有问题了。
ehcache 配置
<!-- ehcache -->
<ehcache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
关键代码对比:
@Repository
public class SodUserDao extends BaseDao<SodUser,Integer> {
@TriggersRemove(cacheName="testCache",removeAll=true)
public Page<SodUser> findUserByPage(int pageSize, int pageNumber){
String sql = "select * from t_user";
Page<SodUser> page = paginate(sql, pageNumber, pageSize,SodUser.class);
return page;
}
@Cacheable(cacheName="testCache")
public SodUser findOne(int id){
String sql = "select * from t_user where id=?";
SodUser sodUser = this.findOne(sql, new Object[]{id});
return sodUser;
}
public SodUser findOneByHql(int id){
String sql = "from SodUser as u where u.id=?";
SodUser sodUser = this.findOneByHql(sql, new Object[]{id});
return sodUser;
}
@Override
public Class<SodUser> getEntityClass() {
return SodUser.class;
}
}
控制层的代码
@Controller
public class DefaultController extends BaseAction {
@Autowired(required=true)
public SodUserDao sodUserDao;
}
先是一个接口
public interface ISodUserDao {
public SodUser findOne(int id);
public SodUser findOneByHql(int id);
}
实现类
@Repository
public class SodUserDaoImple implements ISodUserDao{
@Cacheable(cacheName="testCache")
public SodUser findOne(int id) {
return null;
}
public SodUser findOneByHql(int id) {
return null;
}
}
控制层
@Controller
public class DefaultController extends BaseAction {
@Autowired(required=true)
public ISodUserDao sodUserDaoImpl;
}
怎样在不使用接口的情况下进行修改呢? 关键是写那么多接口没什么用。除非 项目非常大,对于小项目我觉得没必要。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在配置中加上它试试看。。
<!--proxy-target-class="true"强制使用cglib代理 如果为false则spring会自动选择-->
<aop:aspectj-autoproxy proxy-target-class="true"/>atorg.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
我觉得错误的关键字在我标注的红色部分。直接用实现类它不能正常注入。
问题解决!!!
需要修改配置文件,修改后如下:
<ehcache:annotation-drivencache-manager="cacheManager" proxy-target-class="true" />
mark