0

我有以下课程:

@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 ...

}

现在我TestService从这个类之外实例化我的

new TestService(myObject);

变量size当然是null。但是我希望它从 spring 上下文中注入,即使我没有注入整个对象。

是否可以始终注入一些字段?

4

3 回答 3

3

最简单的方法是使用静态 AspectJ 编译(或加载时编织)并且@Configurable:任何带有@Configurable注释的对象都将被自动装配,即使通过实例化也是如此new()

但更传统的方法是以编程方式连接它:

MyBean foo = new MyBean();
ApplicationContext ctx = // whereever you get your context from
ctx.getAutowireCapableBeanFactory().autowireBean(foo);
于 2011-05-06T07:39:12.803 回答
1

是的,您可以使用以下方法通过自动装配过程放置任意对象:

appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)

但是,您仍然需要参考来appContext执行此操作,这取决于您。

更好的方法是使用加载时编织,使用 AspectJ 和@Configurable,但这需要更多的配置工作 - 请参阅docs

于 2011-05-06T07:42:05.780 回答
0

我不认为它可能。只有 spring 实例化的对象才是它管理生命周期的对象。我的意思是 Spring 无法知道您实例化了该对象。可能是如果它连接到 JVM 本身它可以做到这一点,但它没有。从哲学上讲,它不是 IoC 的编写方式和将要编写的方式。

于 2011-05-06T07:38:28.363 回答