我有一个组件设置,它本质上是一个应用程序的启动器.它的配置如下:
@Component
public class MyLauncher {
@Autowired
MyService myService;
//other methods
}
Run Code Online (Sandbox Code Playgroud)
MyService使用@ServiceSpring注释进行注释,并自动连接到我的启动器类中,没有任何问题.
我想为MyLauncher编写一些jUnit测试用例,为此我开始这样一个类:
public class MyLauncherTest
private MyLauncher myLauncher = new MyLauncher();
@Test
public void someTest() {
}
}
Run Code Online (Sandbox Code Playgroud)
我可以为MyService创建一个Mock对象并将其注入我的测试类中的myLauncher吗?我目前在myLauncher中没有getter或setter,因为Spring正在处理自动装配.如果可能的话,我不想添加getter和setter.我可以告诉测试用例使用@Beforeinit方法将模拟对象注入到自动装配的变量中吗?
如果我对此完全错误,请随意说出来.我还是新手.我的主要目标是只需要一些Java代码或注释,将模拟对象放在该@Autowired变量中,而不必编写setter方法或必须使用applicationContext-test.xml文件.我宁愿为.java文件中的测试用例维护所有内容,而不是仅为我的测试维护单独的应用程序内容.
我希望使用Mockito作为模拟对象.在过去,我通过使用org.mockito.Mockito和创建我的对象来完成此操作Mockito.mock(MyClass.class).
@Injectand @Resource和@Autowired注释之间有什么区别?
我们什么时候应该使用它们?
经过几天尝试并在泉源论坛上寻找答案后,我会在这里试试.运行我的应用程序会导致以下异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.my.services.user.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)
这是相关的代码
应用背景:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/test" />
<property name="username" value="test" />
<property name="password" value="test" />
</bean>
<bean …Run Code Online (Sandbox Code Playgroud) Spring无法自动装载我的对象?是否可以在抽象类中自动装配对象.假设所有模式都在application-context.xml中提供
问题:基础和扩展类(如果有)@Service @Component应该是什么注释?
例
abstract class SuperMan {
@Autowire
private DatabaseService databaseService;
abstract void Fly();
protected void doSuperPowerAction(Thing thing) {
//busy code
databaseService.save(thing);
}
}
Run Code Online (Sandbox Code Playgroud)
扩展课程
public class SuperGirl extends SuperMan {
@Override
public void Fly() {
//busy code
}
public doSomethingSuperGirlDoes() {
//busy code
doSuperPowerAction(thing)
}
Run Code Online (Sandbox Code Playgroud)
应用程序的context.xml
<context:component-scan base-package="com.baseLocation" />
<context:annotation-config/>
Run Code Online (Sandbox Code Playgroud) 我有DataPrepareService为报告准备数据,我有一个包含报告类型的枚举,我需要将ReportService注入Enum或从enum访问ReportService.
我的服务:
@Service
public class DataPrepareService {
// my service
}
Run Code Online (Sandbox Code Playgroud)
我的枚举:
public enum ReportType {
REPORT_1("name", "filename"),
REPORT_2("name", "filename"),
REPORT_3("name", "filename")
public abstract Map<String, Object> getSpecificParams();
public Map<String, Object> getCommonParams(){
// some code that requires service
}
}
Run Code Online (Sandbox Code Playgroud)
我试着用
@Autowired
DataPrepareService dataPrepareService;
Run Code Online (Sandbox Code Playgroud)
,但它没有用
如何将我的服务注入枚举?
我正在使用spring 3,我有两个视图范围的bean:
1- Bean1:
@Component("bean1")
@Scope("view")
public class Bean1 {
@Autowired
private Bean2 bean2;
}
Run Code Online (Sandbox Code Playgroud)
2- Bean2:
@Component("bean2")
@Scope("view")
public class Bean2 {
@Autowired
private Bean1 bean1;
}
Run Code Online (Sandbox Code Playgroud)
视图是自定义范围:
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="view">
<bean class="${project.groupId}.utils.ViewScope" />
</entry>
</map>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是自定义视图范围的代码:
public class ViewScope implements Scope {
@SuppressWarnings("rawtypes")
public Object get(String name, ObjectFactory objectFactory) {
Map<String, Object> viewMap = FacesContext.getCurrentInstance()
.getViewRoot().getViewMap();
if (viewMap.containsKey(name)) {
return viewMap.get(name);
} else {
Object object = objectFactory.getObject();
viewMap.put(name, object);
return object; …Run Code Online (Sandbox Code Playgroud) 在Springs最新版本中,我们可以使用注释自动装配bean @Autowired.这将使用其类型(或构造函数,如果应用于它)自动装配bean.有没有什么方法可以使用@Autowired基于我们在Spring的XML文件中没有注释的bean名称的注释作为autowire ="byName"?
我正在试验这个官方Spring 教程中的示例,并且依赖于此代码:https:
//github.com/spring-guides/gs-async-method/tree/master/complete
如果你看一下AppRunner.java 类的代码,我有两个问题:
1)当服务器启动时,如果我在这个类的构造函数中放置一个断点,就像在构造函数中一样,Spring提供了GitHubLookupService,使用了已配置的@Service bean.但是,@Autowired构造函数上没有注释,那么在世界中如何使用正确的依赖项调用此构造函数?它应该是null.
它是Spring Boot的自动假设吗?
Spring是否看到"私有字段+构造函数参数,它假设它应该寻找合适的bean?
是Spring Framework还是Spring引导?
我错过了什么?
2)我记得,为bean/service等提供默认构造函数是可以的.为什么这个类(AppRunner)没有默认构造函数?Spring如何知道它应该使用参数运行构造函数?是因为它是唯一的构造函数吗?
我遇到了一个@Autowired的例子
public class EmpManager {
@Autowired
private EmpDao empDao;
}
Run Code Online (Sandbox Code Playgroud)
我很好奇empDao如何得到集合,因为没有setter方法而且它是私有的.
我正在开发一个小型Java EE Hibernate Spring应用程序,并出现错误:
Error creating bean with name 'articleControleur': Injection of autowired dependencies failed;
oct. 26, 2011 3:51:44 PM org.apache.catalina.core.ApplicationContext log
Grave: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleControleur': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.bd.service.ArticleService com.bd.controleur.ArticleControleur.articleService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.bd.service.ArticleService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)
at …Run Code Online (Sandbox Code Playgroud) autowired ×10
spring ×10
java ×3
annotations ×1
cdi ×1
hibernate ×1
junit ×1
spring-boot ×1
spring-mvc ×1
unit-testing ×1