Java Springbean类可以包含静态方法吗?

Java Springbean类可以包含静态方法吗?,java,spring,spring-bean,Java,Spring,Spring Bean,我希望这不是一个很难回答的问题,我对春天还是很陌生的。bean类可以包含静态方法吗?我最初的想法是否定的,因为静态方法是全局的,整个应用程序和线程都有一个实例可以共享,但bean可能没有这样定义 我试图寻找这个问题,但找不到明确的答案 是的 Springbean也可能有静态方法 使用构造函数@Autowired @Component public class Boo { private static Foo foo; @Autowired public Boo(Foo

我希望这不是一个很难回答的问题,我对春天还是很陌生的。bean类可以包含静态方法吗?我最初的想法是否定的,因为静态方法是全局的,整个应用程序和线程都有一个实例可以共享,但bean可能没有这样定义

我试图寻找这个问题,但找不到明确的答案

是的

Springbean也可能有静态方法

使用构造函数@Autowired

@Component
public class Boo {

    private static Foo foo;

    @Autowired
    public Boo(Foo foo) {
        Boo.foo = foo;
    }

    public static void randomMethod() {
         foo.doStuff();
    }

    public static int getThree(){
         return 3;
    }
}
您也可以这样做: 使用@PostConstruct将值移交给静态字段

@Component
public class Boo {

    private static Foo foo;

    @Autowired
    public Boo(Foo foo) {
        Boo.foo = foo;
    }

    public static void randomMethod() {
         foo.doStuff();
    }

    public static int getThree(){
         return 3;
    }
}
这里的想法是在spring配置bean之后将bean移交给静态字段

@Component
public class Boo {

    private static Foo foo;
    @Autowired
    private Foo tFoo;

    @PostConstruct
    public void init() {
        Boo.foo = tFoo;
    }

    public static void randomMethod() {
         foo.doStuff();
    }
}
来源:

它可以包含在内

@Service
public class TestService {

    @Autowired
    private TestDao testDao;

    public static void test(){
        System.out.println("test");
    }
}


@RestController
@RequestMapping("/api/")
public class TestController {

    @Autowired
    private TestService testService;

    @PostMapping("test")
    public String test(){
       TestService.test();
       return "ok";
    }
}
当然,类可以包含静态方法。更好的问题是它是否应该包含静态方法。(正如您所注意到的)静态方法是全局的,每个应用程序有一个实例(也就是说,它们是单例的)。因此,您必须确保任何静态方法都是线程安全的。