- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的 Bean 配置代码,但是配置没有通过测试,因为它说加载 ApplicationContext 失败。我做错了什么吗?我在每个需要的类的方法中添加了@Autowire(接口(interface)方法除外),但我仍然不知道为什么它没有加载
package soundsystems;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CDPlayerConfig
{
@Bean
public CompactDisc sgtPeppers()
{
return new SgtPeppers();
}
@Bean(name = "SgtPepperPlayer")
public CDPlayer cdPlayer()
{
return new CDPlayer(sgtPeppers());
}
@Bean(name = "AnyCDPlayer")
public CDPlayer cdPlayer(CompactDisc cd)
{
return new CDPlayer(cd);
}
@Bean
public BlankDisc reallyBlankDisc()
{
return new BlankDisc();
}
@Bean
public BlankDisc blankDisc()
{
BlankDisc bd = new BlankDisc();
String title = "Sgt. Pepper's Lonely Hearts Club Band";
String artist = "The Beatles";
List<String> tracks = new ArrayList<String>();
tracks.add("Sgt. Pepper's Lonely Hearts Club Band");
tracks.add("With a Little Help from My Friends");
tracks.add("Lucy in the Sky with Diamonds");
tracks.add("Getting Better");
tracks.add("Fixing a Hole");
bd.setTitle(title);
bd.setArtist(artist);
bd.setTracks(tracks);
return bd;
}
@Bean
public Discography beatlesDiscography()
{
Discography dg = new Discography();
String artist = "The Beatles";
CompactDisc SgtPeppers = new SgtPeppers();
CompactDisc WhiteAlbum = new WhiteAlbum();
CompactDisc HardDaysNight = new HardDaysNight();
CompactDisc Revolver = new Revolver();
List<CompactDisc> cds = new ArrayList<CompactDisc>();
cds.add(SgtPeppers);
cds.add(WhiteAlbum);
cds.add(HardDaysNight);
cds.add(Revolver);
dg.setArtist(artist);
dg.setCDs(cds);
return dg;
}
}
package soundsystems;
import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDPlayerTest
{
@Rule
public final SystemOutRule log = new SystemOutRule().enableLog();
@Autowired
private CompactDisc cd;
@Autowired
private MediaPlayer player;
@Test
public void cdShouldNotBeNull()
{
assertNotNull(cd);
}
@Test
public void play()
{
player.play();
assertEquals("Playing Sgt. Pepper's Lonely Hearts Club Band" + " by The Beatles\n", log.getLog());
}
}
感谢您的关注。
编辑:错误
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AnyCDPlayer': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void soundsystems.CDPlayer.setCompactDisc(soundsystems.CompactDisc); nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [soundsystems.CompactDisc] is defined: expected single matching bean but found 3: blankDisc,sgtPeppers,reallyBlankDisc
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 25 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void soundsystems.CDPlayer.setCompactDisc(soundsystems.CompactDisc); nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [soundsystems.CompactDisc] is defined: expected single matching bean but found 3: blankDisc,sgtPeppers,reallyBlankDisc
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:661)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 41 more
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [soundsystems.CompactDisc] is defined: expected single matching bean but found 3: blankDisc,sgtPeppers,reallyBlankDisc
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1126)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:618)
... 43 more
最佳答案
我相信 Spring 的 @Autowired
默认模式是按类型的。这意味着 Spring 将尝试按接口(interface)类型 Autowiring bean,顺便说一句,你有 3 个具有相同接口(interface)的 bean,而 Spring 对选择哪一个感到困惑。如果你想通过名称实现 Autowiring ,你应该使用 @Qualifier
:@Qualifier("beanname")
关于java - Spring实战第2章把XML bean改成JavaConfig过不了关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38141859/
Java 在 JSR-330 中添加了官方依赖注入(inject)支持,例如 @Inject、@Named 等。这些可以与 Spring 或 Guice 等不同的框架一起使用。 Spring 还提供了
浏览 Spring Javaconfig 引用文档 http://docs.spring.io/spring-framework/docs/current/spring-framework-refer
什么是 JavaConfig 等价物? 尝试像这样声明它,但它仅充当单例 @Bean public CheckOutCounter checkOutCounter(){
找不到错误(( Spring MVC + Hibernate,JavaConfig WebAppConfig: package com.sprhib.init; import java.util.Pr
我在配置camel以使用java配置与mavencamel:run插件时遇到问题。 这是插件 xml: org.apache.camel
我编写了一个调度程序,它仅在处理 xml 文件时才能按预期工作。但我无法使用 Javaconfig 类运行它。以下是代码。 调度程序: public class DemoServiceBasicUsa
我们正在尝试将 AspectJ @Aspect 实现到我们现有的软件中,以便在进行服务调用后执行一些代码。 注意: 我们的服务接口(interface)和实现是@Autowired通过其余 Contr
有多个用@Configuration 注释的类,我想在顶级配置组件中决定在上下文中注册哪一个。 @Configuration public class FileSystemDataStoreConfi
这个问题在这里已经有了答案: Spring: @Component versus @Bean (16 个答案) 关闭 8 年前。 在 JavaConfig 中定义一个 bean 与仅仅注释一个类有何
这个问题在这里已经有了答案: How to import Java-config class into XML-config so that both contexts have beans? (3
Spring 大约需要 5 到 10 秒来自行配置,我将 XML 用于基础结构 bean,并使用带有注释的组件扫描来处理其他所有内容。 Spring JavaConfig 是否消除了组件扫描的需要以及
我有一个问题要解决:1)我们的项目使用 Spring JavaConfig 方法(所以没有 xml 文件)2)我需要创建自定义范围,xml中的示例如下所示:
我是 Spring 框架的新手,我在理解 @Required 时遇到了问题。注释与 Java 配置的应用程序相结合。 这是一个例子。 配置文件 @Configuration public class
我最近正在使用 spring data jpa 开发 spring web 应用程序 我在持久性配置方面遇到问题: @Configuration @EnableTransactionManagemen
我正在尝试设置一个在我的 Spring WebMVCConfig 中未找到的页面,它无法正常工作.. 这是我的配置: @Configuration @EnableWebMvc @PropertySou
我对 Spring 框架还很陌生,在理解 @Required 注释与 Java 配置的应用程序结合使用时遇到了问题。 这是一个示例。 配置文件 @Configuration public class
我们的 Spring 配置包含大约 1200 个 bean,我们使用 component-scan/@Autowired。如果我们将 ApplicationContext 导出为 Xml(并且仍然使用
目前我有一个加载属性文件的 Spring xml 配置(Spring 4)。 上下文属性 my.app.service = myService my.app.other = ${my.app.serv
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我正在将一些现有的 xml 配置转移到 Spring 的 Java 配置。在这个过程中,我遇到了一些被转移的Java代码,抛出一个checked Exception . @Bean public Po
我是一名优秀的程序员,十分优秀!