有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java总是通过上下文在Spring服务中注入一些字段

我有以下课程:

@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上下文中注入的,即使我没有注入整个对象

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


共 (3) 个答案

  1. # 1 楼答案

    是的,您可以使用以下方法将任意对象置于自动布线过程中:

    appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
    

    不过,您仍然需要一个对appContext的引用来实现这一点,这取决于您

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

  2. # 2 楼答案

    最简单的方法是使用static AspectJ compilation (or load time weaving) and ^{}:任何带有@Configurable注释的对象都将自动连接,即使是通过new()实例化

    但更传统的方式是通过编程将其连接起来:

    MyBean foo = new MyBean();
    ApplicationContext ctx = // whereever you get your context from
    ctx.getAutowireCapableBeanFactory().autowireBean(foo);
    
  3. # 3 楼答案

    我认为这是不可能的。只有spring实例化的对象才是它管理其生命周期的对象。我的意思是Spring无法知道你实例化了那个对象。可能是,如果它连接到JVM本身,它可以做到这一点,但它不能。从哲学上讲,这不是国际奥委会的编写方式,也不是它将要编写的方式