可以在 Spring 中自动装配导入的实用程序 类 吗?
Possible to autowire imported utility classes in Spring?
我想在我的 Spring 网络项目中使用数据映射器、记录器、转换器等。是否可以自动装配导入的(jar)实用程序依赖项,而不将其包装在某些@Component 或@Service class 中?我们甚至想那样做,还是应该只使用静态引用?
您只能@Autowire 由 Spring 管理的 bean。因此,您必须通过一些配置声明您的实例:xml 文件中的 bean,或 java 配置中的 @Bean 方法。
@Component 只是在 spring 上下文中自动发现和注册。
如果您的实用程序基于非静态方法,那么这很简单:
如果您使用基于 java 的配置,则只需在 @Bean
注释方法中声明该实用程序。
@Configuration
public class YourConfig {
@Bean
public YourUtil util(){
return new YourUtil ();
}
}
在 xml 中可以简单到:
<bean id="util" class="org.example.YourUtil" />
以下是正确的,但不是所要求的:
至少有两种其他方法可以在不是由 Spring 创建(管理)的实例中注入 bean:
(1) 添加 @Configurable
注释到此 class - 这需要真正的 AspectJ(编译时或加载时编织)
- @see Spring参考章节7.8.1 Using AspectJ to dependency inject domain objects with Spring
- @查看我的 的这个答案,快速 "guide" 启用
@Configurable
支持
(2) 调用 SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
- @请参阅 this question 及其(两个最高投票答案)以了解如何使用的一些想法
我想在我的 Spring 网络项目中使用数据映射器、记录器、转换器等。是否可以自动装配导入的(jar)实用程序依赖项,而不将其包装在某些@Component 或@Service class 中?我们甚至想那样做,还是应该只使用静态引用?
您只能@Autowire 由 Spring 管理的 bean。因此,您必须通过一些配置声明您的实例:xml 文件中的 bean,或 java 配置中的 @Bean 方法。
@Component 只是在 spring 上下文中自动发现和注册。
如果您的实用程序基于非静态方法,那么这很简单:
如果您使用基于 java 的配置,则只需在 @Bean
注释方法中声明该实用程序。
@Configuration
public class YourConfig {
@Bean
public YourUtil util(){
return new YourUtil ();
}
}
在 xml 中可以简单到:
<bean id="util" class="org.example.YourUtil" />
以下是正确的,但不是所要求的:
至少有两种其他方法可以在不是由 Spring 创建(管理)的实例中注入 bean:
(1) 添加
@Configurable
注释到此 class - 这需要真正的 AspectJ(编译时或加载时编织)- @see Spring参考章节7.8.1 Using AspectJ to dependency inject domain objects with Spring
- @查看我的 的这个答案,快速 "guide" 启用
@Configurable
支持
(2) 调用
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
- @请参阅 this question 及其(两个最高投票答案)以了解如何使用的一些想法