Java 始终通过上下文在Spring服务中注入一些字段
我有以下课程:Java 始终通过上下文在Spring服务中注入一些字段,java,spring,initialization,code-injection,applicationcontext,Java,Spring,Initialization,Code Injection,Applicationcontext,我有以下课程: @Service public class TestService{ @Autowired private Integer size; private MyClass myObject; public Test(){ // Default constructor for Spring } public Test(MyClass myObject){ this.myObject = myObje
@Service
public class TestService{
@Autowired
private Integer size;
private MyClass myObject;
public Test(){
// Default constructor for Spring
}
public Test(MyClass myObject){
this.myObject = myObject;
}
// Getters and Setters ...
}
现在,我正在用
new TestService(myObject);
变量size
当然是null
。但是我希望从spring上下文中注入它,即使我没有注入整个对象
是否可以始终注入一些字段?我认为这是不可能的。只有spring实例化的对象才是它管理其生命周期的对象。我的意思是Spring无法知道您实例化了该对象。可能是,如果它连接到JVM本身,它可以做到这一点,但它不能做到。从哲学上讲,这不是国际奥委会的编写方式,也不是它将要编写的方式。我认为这是不可能的。只有spring实例化的对象才是它管理其生命周期的对象。我的意思是Spring无法知道您实例化了该对象。可能是,如果它连接到JVM本身,它可以做到这一点,但它不能做到。从哲学上讲,这不是IoC的编写方式,也不是IoC将要编写的方式。最简单的方法是使用:任何带有
@可配置注释的对象都将自动连接,即使通过new()实例化也是如此。
但更传统的方式是通过编程将其连接起来:
MyBean foo = new MyBean();
ApplicationContext ctx = // whereever you get your context from
ctx.getAutowireCapableBeanFactory().autowireBean(foo);
最简单的方法是使用:任何带有@可配置
注释的对象都将自动连接,即使通过new()
但更传统的方式是通过编程将其连接起来:
MyBean foo = new MyBean();
ApplicationContext ctx = // whereever you get your context from
ctx.getAutowireCapableBeanFactory().autowireBean(foo);
是的,您可以使用以下方法通过自动布线过程放置任意对象:
appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
不过,您仍然需要一个对appContext
的引用来执行此操作,这取决于您自己
更奇特的方法是使用加载时编织,使用AspectJ和@Configurable
,但这需要更多的配置工作-请参阅。是的,您可以使用以下方法通过自动布线过程放置任意对象:
appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
不过,您仍然需要一个对appContext
的引用来执行此操作,这取决于您自己
更奇特的方法是使用加载时编织,使用AspectJ和@Configurable
,但这需要更多的配置工作-请参阅。“如果它连接到JVM本身,它可以做到,但它不能做到”-它可以做到-使用@Configurable
(请参阅其他答案)这不是Spring的工作。这是AspectJ的工作。Spring是一个DI框架。a)Spring是AspectJ最大的贡献者之一,例如,《AspectJ在行动中》的作者Ramnivas Laddad是Spring的提交者b)我们谈论的是属于官方Spring发行版的方面和注释。这是春天的一部分,太棒了。Spring支持AspectJ注释它对AOP有很大的支持,但是Spring主要是一个DI框架,它不是编写它们的正确方法。更多关于Spring的AOP使用运行时编织,而不是加载时编织或编译时编织……a)Spring是b)二者,并在Spring参考中明确描述为Spring AOP的替代方案。做这件事的方法总是不止一种,尤其是在Spring中。“如果它连接到JVM本身,它可以做到,但它没有”——它可以做到——使用@Configurable
(参见其他答案)这不是Spring的工作。这是AspectJ的工作。Spring是一个DI框架。a)Spring是AspectJ最大的贡献者之一,例如,《AspectJ在行动中》的作者Ramnivas Laddad是Spring的提交者b)我们谈论的是属于官方Spring发行版的方面和注释。这是春天的一部分,太棒了。Spring支持AspectJ注释它对AOP有很大的支持,但是Spring主要是一个DI框架,它不是编写它们的正确方法。更多关于Spring的AOP使用运行时编织,而不是加载时编织或编译时编织……a)Spring是b)二者,并在Spring参考中明确描述为Spring AOP的替代方案。做这件事的方法总是不止一种,尤其是在春天。