问题标签 [spring-ioc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
15042 浏览

java - Difference between @InjectMocks and @Autowired usage in mockito?

When I was writing test case using the Mockito and Junit, I was using the @InjectMocks for the class to be tested. In other parts of project, I also see @Autowired is being used for the class to be tested.

When can I use @InjectMocks and @Autowired? What is the difference between two when we are trying to use them with class to be tested?

0 投票
1 回答
1176 浏览

dependency-injection - spring@Component 有什么用?

Guice 没有类似的概念。例如,Guice 可以自动注入具有默认构造函数的任何类,而无需任何特殊的类注解。为什么 spring 必须知道启动时的每个 bean?出于自动装配的目的,弹簧不能只从类路径中查找类吗?我能想到的一个原因是 AOP。但是如果你不使用 AOP,整个 bean 定义计算会增加大量的启动时间,这是完全没有必要的。

编辑:

明确地说,我希望 spring 从类路径中按需查找一个类

Foo因此,当我使用spring创建 bean 时,getBean()可以看到它需要一个Bar,因此它可以简单地在类路径上查找Bar。这就是 Guice 所做的,它避免了在开发过程中非常缓慢的不必要的组件扫描。

0 投票
2 回答
4969 浏览

java - Annotating WebSecurityConfigurerAdapter with @Configuration causes config to be invoked twice

When I create a WebSecurityConfigurerAdapter it is getting registered twice. I've created a configuration exactly the same as the Hello Web Security Java Configuration example from the reference docs.

The configuration is working as expected, though beans and the filter chain gets registered twice as shown in the tomcat output.

AppInitializer.java

SecurityConfig.java

SecurityWebApplicationInitializer.java

WebConfig.java

UPDATE

As @lkrnac has pointed out with his answer that the config is being loaded twice during the WebConfig @ComponentScan annotation. I had figured that spring would be smart enough to not load a config that it had previously loaded. I could locate the classes outside of the config namespace though that seems like a nuisance. Instead I have chosen to provide an exclude filter as in the following:

This way I can freely still create new config classes for my web context without having to worry about them being included or not.

0 投票
0 回答
553 浏览

spring - 从 Spring AOP 执行拦截器后丢失自动装配的属性

在浪费了很多时间试图找到答案之后,我决定发布这个疑问。
我有一个我想被 Spring AOP 拦截的类。

ObjectToBeProxied.java

ExceptionHandlerAspect.java

Spring AOP 配置:

当我调用该方法ObjectToBeProxied.doStuff()时,ObjectToBeProxied.parameterValueService自动装配是可以的,而不是空的。

但是,当切面拦截方法调用ObjectToBeProxied.findEventParameterValue(..)并执行时ExceptionHandlerAspect.handleAround(..)ObjectToBeProxied.parameterValueService就不行了,它是空的。

调试它,我可以发现 Spring AspectObjectToBeProxied在拦截它后返回代理,但没有自动装配的属性对象。

我哪里错了?

0 投票
3 回答
355 浏览

java - Spring xml与java config中的类类型注入

我像这样实例化X,

当我构建它抱怨需要Class<B>找到的代码时Class<C>。由于C扩展了B,我不能使用C.class吗?如果是这样,有人可以解释为什么吗?

我使用 Spring 的基于 XML 的 bean 做同样的事情,创建它工作得很好。bean定义将是

这工作得很好。我不明白为什么在 java 中实例化会失败。

0 投票
1 回答
3374 浏览

java - AnnotationConfigApplicationContext.getBean 返回一个不同的bean,Spring

我有一个问题,我需要RoomService注入一个 ClassA,我在 ClassA 中发现它工作正常,roomService 的 id 是相同的。

虽然出于某种原因,我需要 roomservice 根据一些输入参数为我创建房间实例,所以我使用下面的配置来实现这一点:

问题是我需要RoomService单身,但我发现在 Application.java 中, ctx.getBean(roomService) 总是返回一个具有不同 id 的不同 bean。Spring不应该重用同一个bean吗?这是为什么?

这是我在 RoomService.java 中创建房间的方法

更新:我尝试重用相同的 ctx,但它不起作用。一个提示是,当我运行 tomcat 启动它时,我发现我的构造函数RoomService()被多次调用(我在其中设置了一个断点。)

这是我的 web.xml

请帮忙!

0 投票
0 回答
549 浏览

java - 如何在 Spring 注入中使用构建器模式?

TL;DR:如何使用Spring IoC组合生成器模式?

我正在创建一个 Spring 项目,该项目根据某些字段的分布参数填充表(即 50% 的记录必须属于 A 类型,40% 属于 B 类型,10% 属于 C 类型;对于每种类型,50% 必须属于子类型1、亚型 2 的 20%、亚型 3 的 10% 等)。

为了加快记录创建,我有一个 RecordFactory,它计算这些参数的分布并返回一个 RecordBuilder 列表。每个 RecordBuilder 扩展 Callable 接口以同时处理和返回记录:

活动图

到目前为止,我所做的,仅考虑类型 A、B 和 C 是创建一个 TypeABuilder、TypeBBuilder 和 TypeCBuilder,它们为每种类型返回不同的 ProcessorFactory 实现:

但是,显然,这是一个糟糕的设计。随着项目变得更加复杂,我需要为每个可能的组合设置 mxn 类。

更好的设计是使用组合,根据需要的参数创建 DataBuilder。我怎样才能在不失去 Spring IoC 的好处的情况下做到这一点?


更新:

我改变了 RecordFactory 构建 ProcessorFactory 的方式。我有一个 Builder 对象,而不是单独的 Builder 对象,它使用 Builder 模式根据我的需要创建一个 ProcessorFactory:

现在我的问题是:当我在 Builder 中创建一个新的 ProcessorFactoryImpl 时,我无法注入我的处理器。如何在 Spring 中使用构建器模式,保持这种灵活性?

0 投票
3 回答
468 浏览

java - 让 Spring 的 IoC 容器以零配置实例化 bean(如 Google Guice 的行为)

我有一个爱好项目,我想迁移到 Spring。

例如,我有以下类:

但是,当我阅读文档时,我必须使用 @Component 之类的注释(或其他类似的注释)来注释所有要由 Spring 管理的类。

使用以下代码运行它:

给我错误:

我的问题是:有没有办法让 Spring 管理我要求 ApplicationContext 实例化的任何在 Annotated Config(或 XML 配置)中注册它们?

在 Guice 中,我可以注入课堂

给我输出:

无论如何我可以让Spring像Guice一样工作吗?就像让 Spring 注入我的 bean 一样,我不必注册或扫描带有 @Component 类注释的类的包?

任何 Spring 大师有办法解决这个问题吗?

0 投票
2 回答
837 浏览

java - Spring递归加载应用程序上下文

我想在加载应用程序上下文后调用一个方法。我使用ApplicationListener了接口并实现了onApplicationEvent.

但是上面的代码是递归的。是否可以从函数内部的应用程序上下文中获取 bean onApplicationEvent

0 投票
0 回答
502 浏览

java - 服务层不使用 EntityManager 自动连接 DAO

我的 DAO 中有以下代码:

直到这里一切正常,如果我在控制器(已经有@Transactional)中调用这个 DAO,它工作正常。

但是当我像这里一样创建@Service 时:

它不会连接 DAO,并且 pedidoDAO.getPedidos() 永远会抛出 NullPointerException。

我在服务中做错了什么?我对 EntityManager 和 Transactional 控制器的理解是否错误?

我在 servlet 中的 EntityManager 配置:

已编辑。

我的控制器调用@Service

第一个问题解决了自动装配 pedidoBU。

但是当我启动服务器时出现另一个错误:

解决的第二个问题:我试图在我的代码的另一点使用另一个@Service内部而不使用接口。@Service当我更改为使用接口时,它被称为主类作为代理并且可以正常工作。