我有一个扩展Thread类的类,如下所示:
public class A extends Thread {
public void run() {
System.out.println("in thread");
}
}
我下面有一个这样的服务类:
@Service
public class Service {
public void someMethod() {
.....
}
}
如何在我的线程类中自动装配服务类实例?
答案 0 :(得分:1)
您的问题的答案为是。您可以在线程类中使用自动装配。
答案 1 :(得分:1)
您可以使class A
成为Spring组件,然后注入依赖项:
@Component
class A extends Thread{
public void run()
{
System.out.println("in thread");
}
}
也就是说,请特别注意run()
答案 2 :(得分:1)
您绝对可以自动接线。
示例如下。
@Component
class A extends Thread{
@Autowired
Service service;
public void run(){
System.out.println("HI");
serivce.anyMethod();
}
}
您应该在Spring应用程序上下文中通过@ component,@ service注册线程类,或者通过@bean在配置类中创建bean。
答案 3 :(得分:0)
是的,可以在Thread类中自动装配实例。
源代码如下:
@Component
public class A extends Thread {
@Autowired
private Service service;
public void run() {
System.out.println("in thread");
}
public void someMethod() {
service.someMethod();
}
}
答案 4 :(得分:0)
是的,您可以按照我们的同事的建议自动接线。但是,我想强调一点:该类必须是Spring bean。仅当类本身由Spring管理时,Spring才能自动进行接线。
一旦这样做,您应该了解默认情况下,spring会在初始化期间通过调用new A()
创建一个bean,但是不会为您调用start
。另一个有趣的见解是,此Thread
仅创建一次(默认情况下,所有bean在春季都是单例的),因此,如果要使用A
的许多实例,则可能需要将其声明为原型范围。>
答案 5 :(得分:0)
您可以通过多种方式进行操作。其中一些内容如下:
A。。将@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
与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以获得更多详细信息。