在spring应用中,经常使用@Component、@Controller、@Service注解,与之匹配的还有一个更加常见的@Autowired注解。前者的作用在于让spring容器来管理这个类,而后者的作用就是从spring容器中获取这个类的对象,更关键的是,这个对象是单例的。
为了使用@Autowired获取某个类的单例,必须将当前类也交给spring容器管理,即使用@Component等注解标识这个类。但是这样会出现一个问题,就是当前类的调用也必须通过注解来获得。那么,new就无法使用了。举个例子,我有一个TaskThread类,每次发布任务时就会启动了一个TaskThread类,这里必须通过new来实例化对象,但是TaskThread类中又需要用到service层、dao层的对象,而在这时候这些对象是不能被@Autowired的,因为这样做没有效果,所有的@Autowired对象都会是null。那么应该怎么办呢?
通过spring上下文来获取单例对象的实例!
一种简单的获取spring上下文的方式是通过spring启动类来获取,下面看实现:
// spring应用启动类
@SpringBootApplication
public class WebTestApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
//SpringApplication.run(WebTestApplication.class, ar