当类不是一个 Bean 时,如何在字段变量上使用 @Autowired?

12 浏览
0 Comments

当类不是一个 Bean 时,如何在字段变量上使用 @Autowired?

假设我有以下代码:

@Service
public class MyService {
    public void sayHello() {
        System.out.println("Hello");
    }
}
public class MyTestClass {
    @Autowired
    private MyService thisService;
    
    public void transferHello() {
        thisService.sayHello(); 
    }
}
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(PilContainerApplication.class, args);
        MyTestClass thisTest = new MyTestClass();
        thisTest.transferHello();
    }
}

由于`MyTestClass`不像service或controller那样是一个bean,当我使用`MyTestClass thisTest = new MyTestClass();`时,`thisService`会具有空引用。

我想知道如何解决这个问题...我尝试使用`public static MyService thisService`,但它说不能在静态字段上使用`@Autowired`注解。

谢谢。

0
0 Comments

当一个类不是Spring的Bean时,想要在该类中使用@Autowired注解来注入另一个Bean的实例,可以使用SpringBeanAutowiringSupport来实现。

下面是一个示例代码:

public class A {
    @Autowired
    private B b;
    
    public A() {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 
    }
}

在上述代码中,类A不是一个Spring的Bean,但是我们想要通过@Autowired注解来注入类B的实例。为了实现这一点,我们在类A的构造函数中调用了SpringBeanAutowiringSupport的processInjectionBasedOnCurrentContext方法。这个方法会根据Spring的上下文来自动注入类A中的成员变量b。

通过使用SpringBeanAutowiringSupport,我们可以在非Spring Bean的类中使用@Autowired注解来注入其他Bean的实例。这样可以提高代码的灵活性和可维护性,使得我们可以更方便地使用依赖注入的特性。

如果你想在一个非Spring Bean的类中使用@Autowired注解来注入其他Bean的实例,可以尝试使用SpringBeanAutowiringSupport来实现这一功能。这样可以避免手动实例化Bean,并且减少了代码的冗余。同时,使用注解可以使得代码更加清晰可读,并且方便后续的维护和扩展。

总结起来,当一个类不是Spring的Bean,但是想要在该类中使用@Autowired注解来注入其他Bean的实例时,可以使用SpringBeanAutowiringSupport来实现。通过调用processInjectionBasedOnCurrentContext方法,可以自动注入被@Autowired注解标记的成员变量。这样可以提高代码的可维护性和灵活性,使得我们可以更方便地使用依赖注入的特性。

0
0 Comments

当一个类不能被更改以注释为Spring构造时,@Autowired是一个很好的替代方法:

public class MyBeansConfiguration {
   public MyTestClass getMyTestClass(MyService myService) {
       return new MyTestClass(myService);
   }
}

现在可以在应用程序类中进行注入:

public class PilContainerApplication {
    MyTestClass myTestClass;
    public void init(){
        myTestClass.transferHello();            
    }
    public static void main(String[] args) {
        SpringApplication.run(PilContainerApplication.class, args);
    }    
}

请注意,bean是类的实例,并且被注入到依赖于它们的其他类的实例中。因此,在静态的main()方法中无法访问被注入的bean。但是,在使用@Autowired注释的实例方法中,当当前bean的依赖关系被注入时,可以访问它。

附注:类名必须以大写字母开头。我在提供的代码中已经这样做了。

0