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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。