iteye_15553 2009-10-23 10:54
浏览 160

EhCache出现的一个问题....

一个简单的例子
接口一个save方法
[code="java"]
public interface ICacheMgr {
public void save(String user) ;
}
[/code]
实现类
[code="java"]
//@Service
public class CacheMgrImpl extends BaseManagerImpl implements ICacheMgr {
//@Autowired
//@Qualifier("userLoginName")
private Cache userLoginNameCache;

public void save(String user) {
    userLoginNameCache.put(new Element(user,user));
    System.out.println(userLoginNameCache.get(user));
}

public Cache getUserLoginNameCache() {
    return userLoginNameCache;
}

public void setUserLoginNameCache(Cache userLoginNameCache) {
    this.userLoginNameCache = userLoginNameCache;
}

}
[/code]

配置文件:
[code="java"]

<bean id="cacheManager"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation">
        <value>classpath:ehcache-application.xml
        </value>
    </property>
    <!--
        <property name="shared"> <value>true</value> </property>
    -->
</bean>
<!--统一用户登录名缓存-->
<bean id="userLoginNameCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
    <property name="cacheManager">
        <ref local="cacheManager" />
    </property>
    <property name="cacheName">
        <value>LOGINNAME2ID</value>
    </property>
    <qualifier value="userLoginName"></qualifier>
</bean>
[color=red]<bean id="cacheMgrImpl" class="com.cjweb.purview.manager.impl.CacheMgrImpl">
<property name="userLoginNameCache" ref="userLoginNameCache"></property>

</bean>[/color]
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
<context:component-scan base-package="com.cjweb" />

[/code]
测试代码:
[code="java"]
public class TestCache {
public static ApplicationContext cxt;
public static ICacheMgr cacheMgr;
@BeforeClass
public static void setThredInfoClass() throws Exception {
try{
cxt=new ClassPathXmlApplicationContext("applicationContext.xml");
cacheMgr = (ICacheMgr)cxt.getBean("cacheMgrImpl");
}catch(Exception e){
e.printStackTrace();
}
}
@Test
public void test() {
cacheMgr.save("ss");
}
}
[/code]
使用bean id="cacheMgrImpl" class="com.cjweb.purview.manager.impl.CacheMgrImpl">

</bean>赋值的时候测试中将成功....如果使用注解方法
    //@Autowired
//@Qualifier("userLoginName")

出现以下异常:
[code="java"]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheMgrImpl': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.sf.ehcache.Cache com.cjweb.purview.manager.impl.CacheMgrImpl.userLoginNameCache; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [net.sf.ehcache.Cache] is defined: Unsatisfied dependency of type [class net.sf.ehcache.Cache]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:243)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:959)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:880)
at junit.test.purview.TestCache.setThredInfoClass(TestCache.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
at org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private net.sf.ehcache.Cache com.cjweb.purview.manager.impl.CacheMgrImpl.userLoginNameCache; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [net.sf.ehcache.Cache] is defined: Unsatisfied dependency of type [class net.sf.ehcache.Cache]: expected at least 1 matching bean
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435)
at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240)
... 26 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [net.sf.ehcache.Cache] is defined: Unsatisfied dependency of type [class net.sf.ehcache.Cache]: expected at least 1 matching bean
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412)
... 28 more
[/code]

请问下是什么原因导致的....
[b]问题补充:[/b]
//@Service 这个注释了啊...这个就是交给他管理了啊...加上这个异常好像是转换不通过的异常...
[b]问题补充:[/b]
加了还是不行...

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料