标签: autowired

在测试期间注入@Autowired私有字段

我有一个组件设置,它本质上是一个应用程序的启动器.它的配置如下:

@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).

java junit spring unit-testing autowired

65
推荐指数
3
解决办法
10万
查看次数

注入和资源以及自动注释

@Injectand @Resource@Autowired注释之间有什么区别?

我们什么时候应该使用它们?

spring annotations dependency-injection autowired cdi

63
推荐指数
2
解决办法
3万
查看次数

没有匹配的类型的bean ...找到依赖

经过几天尝试并在泉源论坛上寻找答案后,我会在这里试试.运行我的应用程序会导致以下异常:

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)

java spring hibernate spring-mvc autowired

57
推荐指数
4
解决办法
23万
查看次数

Spring可以在抽象类中自动装配吗?

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)

spring abstract-class autowired

57
推荐指数
3
解决办法
8万
查看次数

将bean注入枚举

我有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)

,但它没有用

如何将我的服务注入枚举?

java spring dependency-injection autowired

54
推荐指数
2
解决办法
3万
查看次数

请求的bean目前正在创建中:是否存在无法解析的循环引用?

我正在使用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)

spring dependency-injection autowired

53
推荐指数
7
解决办法
12万
查看次数

使用注释按名称自动装配spring bean

在Springs最新版本中,我们可以使用注释自动装配bean @Autowired.这将使用其类型(或构造函数,如果应用于它)自动装配bean.有没有什么方法可以使用@Autowired基于我们在Spring的XML文件中没有注释的bean名称的注释作为autowire ="byName"

spring autowired

50
推荐指数
2
解决办法
7万
查看次数

Spring在没有@Autowired批注的构造函数中注入依赖项

我正在试验这个官方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如何知道它应该使用参数运行构造函数?是因为它是唯一的构造函数吗?

spring dependency-injection autowired spring-boot

48
推荐指数
2
解决办法
3万
查看次数

Spring @Autowired是如何工作的

我遇到了一个@Autowired的例子

public class EmpManager {
   @Autowired
   private EmpDao empDao;
}
Run Code Online (Sandbox Code Playgroud)

我很好奇empDao如何得到集合,因为没有setter方法而且它是私有的.

spring dependency-injection autowired

47
推荐指数
2
解决办法
3万
查看次数

注入自动连接的依赖项失败;

我正在开发一个小型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)

spring autowired

46
推荐指数
1
解决办法
26万
查看次数