作为启动类(Application),我们通常使用@SpringBootApplication
注解声明当前类是一个启动类.可以通过@Bean
注解生成IOC容器管理的bean。
要启动IOC容器,我们需要引入org.springframework.context.annotation.AnnotationConfigApplicationContext
类
然后通过ApplicationContext
类启动:
ApplicationContext context = new AnnotationConfigApplicationContext("com.xxx");
这段代码会自动加载包com.xxx
下的 Bean,只要引用了 Spring 注解的类都可以被加载(前提是在这个包下),因此,启动类我们一般放在最外侧的包中,保证所有的类都可以被扫描加载到。
下图是Spring中IOC的原理实现图:
实例化需要调用Bean实例,例如:
1 | SongService songService = context.getBean(SongService.class); |
当然,也会有需要调用启动类所在包以外包的情况,我们一般通过在@SpringBootApplication
注解中加入scanBasePackages
参数进行操作,实例如下:
1 | "com.arizzer.app", "com.arizzer.service"}) (scanBasePackages={ |
通过在参数中添加其他需要扫描的包名,这样在启动类所在包的类中实例化,或是自动注入,都可以正常扫描了。
(也可以通过添加@ComponentScan
注解完成,操作类似:@ComponentScan({"com.arizzer.app", "com.arizzer.service"})
)