• 欢迎访问开享网

springboot中注解静态对象

java 4个月前 (10-28) 96次浏览 已收录 0个评论 扫描二维码

在springboot中使用@Autowired注解静态类,如:

@Service
public class TestService {
    public void print(String str){
        System.out.println("hello "+str);
    }
}

@SpringBootApplication
public class Application {
    @Autowired
    private static  TestService testService;

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);

        testService.print("springboot");
    }
}

运行时会抛出异常:Exception in thread “main” java.lang.NullPointerException
,因为testService并没有实例化。

解决方法:

@SpringBootApplication
public class Application {
    private static  TestService testService;
    @Autowired
    private TestService service;
    @PostConstruct
    private void init(){
        Application.testService=this.service;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);

        testService.print("springboot");
    }
}

在使用@PostConstruct注解的方法中实例化静态变量,使用@Value注解静态变量获取配置参数也可以使用相同解决方式。

@SpringBootApplication
public class Application {
    private static  TestService testService;
    private static Integer port;
    @Autowired
    private TestService service;

    @Value("${server.port}")
    private Integer _port;
    @PostConstruct
    private void init(){
        Application.testService=this.service;
        Application.port=this._port;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);

        testService.print("springboot");
        System.out.println("port: "+port);
    }
}

开享网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:springboot中注解静态对象
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址