我看到一些奇怪的行为,我希望这里的人能对此问题有所启发。
让我开始描述我的设置。首先,一个简单的数据对象
public class Apple {
private String name;
public Apple withName(String name) {
this.name = name;
return this;
}
public String getName() {
return name;
}
}
还有一个测试班
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfig.class})
public class AppleTest {
@Autowired private Apple apples;
@Test
public void simpleTest() {
System.out.println("OBJ: "+apples);
}
}
配置如下
@Configuration
public interface ConfigInterface {
public Apple getApple();
}
有实施班
@Configuration
@Import(AbstractTestConfig.class)
public class TestConfig implements ConfigInterface {
public Apple getApple() {
return new Apple().withName("Granny apples");
}
}
随着配置依赖…
@Configuration
public class AbstractTestConfig {
@Autowired ConfigInterface conf;
@Bean Apple myTestApple() {
return conf.getApple();
}
}
所有这些都很好。我运行测试,看到预期的输出。但随后,我将扳手扔了进去,并修改了AbstractTestConfig,使其看起来如下。
@Configuration
public class AbstractTestConfig {
@Autowired ConfigInterface conf;
@Bean Apple myTestApple() {
return conf.getApple();
}
// NEW CODE
@Bean CustomScopeConfigurer scopeConfigurer() {
return new CustomScopeConfigurer();
}
}
当需要构造bean 时,突然该@Autowired
对象conf
为null Apple
。
更奇怪的是,如果我将CustomScopeConfigurer
bean移到TestConfig
该类上,那么它将起作用。
关于范围或CustomScopeConfigurer
对象,我是否不了解?
从Spring @Bean
javadoc复制:
BeanFactoryPostProcessor-返回@Bean方法
对于返回Spring
BeanFactoryPostProcessor(BFPP)类型的@Bean方法,必须特别注意。因为BFPP对象必须在容器生命周期的早期实例化,所以它们会干扰@Configuration类中的@
Autowired,@
Value和@PostConstruct之类的注释的处理。为了避免这些生命周期问题,请将BFPP返回的@Bean方法标记为静态。例如:
@Bean
public static PropertyPlaceholderConfigurer ppc() {
// instantiate, configure and return ppc ...
}
通过将此方法标记为静态,可以在不引起其声明@Configuration类实例化的情况下调用该方法,从而避免了上述生命周期冲突。但是请注意,如上所述,静态@Bean方法不会针对范围和AOP语义进行增强。这在BFPP情况下可行,因为其他@Bean方法通常不引用它们。提醒一下,将为具有返回类型可分配给BeanFactoryPostProcessor的任何非静态@Bean方法发出WARN级别的日志消息。
我已将我的Spring应用程序配置如下: 我使用组件扫描来选择@配置。我的问题是Spring会为B注入豆子吗
我有一个注释类,它提供了我可以在所有项目中使用的核心功能: 在XML中,它看起来像: 这里也讨论了它,但我需要使用XML和JavaConfig来完成它。是否可能,如何实现?
我希望你能帮我做以下几件事: 我正在使用spring安全和spring MVC建立一个web应用程序,我需要重定向的流到登录页面,一旦有一个尝试访问一个禁止的资源(403 HTTP状态代码)。 现在,spring安全已经完成了防止未经授权访问我在Restful API(@RESTController)中公开的每一个资源的工作,并使用适当的403默认页面进行响应。但由于我需要重定向到登录页面,我需要
我正在尝试让Spring Batch2.2与JavaConfig一起工作。 现在,他们有一个注释,它设置了很多东西。默认注释为其职务数据使用datasource,但我们不想保存此数据,也不想为其创建表。文档中提到了一些关于自定义的内容,但我无法使其工作: 用户必须提供作为上下文中的bean,或者在配置类本身中实现,例如: 在我们的旧版本中,我们可以使用类,因此它将所有数据保存在内存中。是否可以使用
我在JavaConfig中发现了这一点,它看起来如下所示: 如果我的假设错了,请纠正我。 3)我需要将我的类注释为@Component(Scope=“Workflow”)。同样,xml配置将如下所示:
问题内容: 根据Spring的使用Spring IoC配置AspectJ方面 的文档,以便为Spring IOC配置方面,必须在xml配置中添加以下内容: 正如@SotiriosDelimanolis所建议的那样,应在JavaConfig中将其重写为以下内容: 但是,这仅在以本机AspectJ 语法编写方面时才起作用。如果它是用Java编写并带有注释的,则会收到以下错误消息: 未为Profiler