SpringBoot是一个很优秀的轻量化开发框架,它把开发者从重复繁杂的配置中拯救出来,让人们专注于应用层的开发,和逻辑代码的编写。最为一个初学者,我试着写了一个项目,因为之前有写过ssm的经验,很快框架就搭好了。
如图:
项目是学长公司的一个结构化服务器,功能暂时不提,分包就是springboot的常用分包。config包中是所有springboot在运行时需要加载的bean目录,controll是控制层代码,entity是数据库的映射类。属性ssm这些都应该懂,但是springboot中有些特殊的配置方式,我要记下来,便于以后翻看。
关于bean的加载,spring中bean的加载是通过xml配置完成的,原理就是spring通过xmlbeanfactory去解析xml中的bean节点,完成对象的创建,放入对象池中(说起来很简单,过程特别复杂),但是在springboot中一切都通过注解去完成
如图:
用过安卓dagger2框架的是不是很熟悉,在dagger中项目依赖也是通过这个方式用注解创建全局可以使用的对象,springboot中bean对象也是在运行时创建,生命周期同application相同,全局都可以使用这个对象,使用方法
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}
@Compant注解去声明一个组件,组件在项目运行时运行,初始化方法,在其他需要用到bean的地方调用。
private HttpUtils(){
apiService = (ApiService) SpringUtil.getBean("ApiService");
}
总结一下:在springboot中config的作用就是去声明bean对象,bean对象在项目运行时被预加载,并创建对象,想要获取被实例化的bean需要用Application的实例去获取,大致就是这样。明天去看看原理。最近也在看spring的源码书,希望能坚持下来。