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的替代方案。做这件事的方法总是不止一种,尤其是在春天。