我们能在自定义线程类中自动连接一个类示例吗?

oewdyzsn  于 2021-06-30  发布在  Java
关注(0)|答案(6)|浏览(326)

我有一个扩展线程类的类,如下所示:

public class A extends Thread {  

    public void run() {
      System.out.println("in thread");
    }

}

我有一个服务类如下:

@Service
public class Service {

    public void someMethod() {
      .....
    } 

}

如何在线程类中自动关联服务类示例?

pkln4tw6

pkln4tw61#

有很多方法可以做到这一点。其中一些如下:
答。使用 @Autowired 成员变量为 Service :

@Component
public class A extends Thread {     
    @Autowired
    private Service service;

    public void run() {
      System.out.println("in thread");
    }
}

b。使用 @Autowired 构造函数初始化的成员变量 Service :

@Component
public class A extends Thread {         
    private Service service;

    @Autowired
    public A(Service service) {
        this.service = service;
    }

    public void run() {
      System.out.println("in thread");
    }
}

c。使用 @Autowired 使用setter方法 Service :

@Component
public class A extends Thread { 
    private Service service;

    @Autowired
    public void setService(Service service) {
        this.service = service;
    }

    public void run() {
      System.out.println("in thread");
    }
}

做检查https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-有关更多详细信息,请参阅factory autowire。

7xzttuei

7xzttuei2#

是的,你可以自动连线,正如我们的同事已经建议的那样。但是,我想强调一点:类必须是springbean。只有当类本身由spring管理时,spring才能自动连接某些东西。
一旦您这样做了,您应该了解,默认情况下,spring通过调用 new A() 在初始化过程中,但它不会调用 start 为你。另一个有趣的发现是 Thread 将只创建一次(默认情况下,所有bean在spring中都是单例的),因此如果您需要 A 您可能希望将其声明为原型范围。

mi7gmzs6

mi7gmzs63#

你完全可以自动连线。
示例如下。

@Component
class A extends Thread{

 @Autowired
 Service service;

 public void run(){
      System.out.println("HI");
     serivce.anyMethod();
 }

}
您应该在spring应用程序上下文中注册thread类@component,@service 或者在配置类中通过@bean创建bean。

kyks70gy

kyks70gy4#

你的问题的答案是肯定的。可以在线程类中使用autowired。
看看这根线

mbzjlibv

mbzjlibv5#

你可以让 class A 一个spring组件,然后注入依赖项:

@Component
class A extends Thread{  
    public void run()
    {
     System.out.println("in thread");
    }

}

也就是说,要特别注意你在房间里做什么 run()

i7uaboj4

i7uaboj46#

是的,可以在线程类中自动连接示例。
源代码如下:

@Component
public class A extends Thread {

  @Autowired
  private Service service;

  public void run() {
     System.out.println("in thread");
  }

  public void someMethod() {
     service.someMethod();
  }  
}

相关问题