SpringBoot啟動流程
主要分為三個部分,
第一部分 進行SpringApplication的初始化模塊,配置一些基本的環境變量、資源、構造器、監聽器,
第二部分 實現了應用具體的啟動方案,包括啟動流程的監聽模塊、加載配置環境模塊、及核心的創建上下文環境模塊,
第三部分 是自動化配置模塊,該模塊作為springboot自動配置核心
主要創建了配置環境(environment)、事件監聽(listeners)、應用上下文(applicationContext),並基於以上條件,
在容器中開始實例化需要的Bean,至此,通過SpringBoot啟動的程序已經構造完成
Spring中層級
model 層即數據庫實體層,也被稱為 entity 層 /pojo層
一般數據庫一張表對應一個實體類,類屬性同表字段一一對應
滿足dao層的數據封裝需求,所創建的實體類;
dao 層即數據持久層,也被稱為mapper層。
dao層的作用為訪問數據庫,向數據庫發送sql語句,完成數據的增刪改查任務。
service 層調用dao層接口,
接收dao層返回的數據,完成項目的基本功能設計
service:業務層(接口),多態的體現;
service.impl :業務層的實現類。
controller 層負責前后端交互,
接受前端請求,調用service層,接收service層返回的數據,最后返回具體的頁面和數據到客戶端
Spring 注解
spring可以配置各個層的bean組件(bean)並且維護各個bean之間的關系
Ioc(控制反轉)和AOP(面向切面編程)為內核
@Controller 只是定義了一個控制器類,而使用 @RequestMapping 注解的方法才是處理請求的處理器
@Service() 此注注解屬於業務邏輯層
@Mapper和@Repository是常用的兩個注解,兩者都是用在dao上
注解本質上就是一個類,開發中我們可以使用注解 取代 xml配置文件。
@component是spring中的一個注解,它的作用就是實現bean的注入
web開發,提供3個@Component注解衍生注解(功能一樣)取代
@Repository(“名稱”):dao層
@Service(“名稱”):service層
@Controller(“名稱”):web層
@Autowired:自動根據類型注入
@Qualifier(“名稱”):指定自動注入的id名稱
spring保證如果A依賴B(如beanA中有@Autowired B的變量),那么B將先於A被加載
可以在bean A上使用@DependsOn注解,告訴容器bean B應該先被初始化
首先要了解depends-on或@DependsOn作用,是用來表示一個bean A的實例化依賴另一個bean B的實例化,
但是A並不需要持有一個B的對象,如果需要的話就不用depends-on,直接用依賴注入就可以了或者ref標簽。
@DependsOn用法
1:直接或者間接標注在帶有@Component注解的類上面;
2:直接或者間接標注在帶有@Bean 注解的方法上面;
spring容器載入bean順序是不確定的,spring框架沒有約定特定順序邏輯規范,
可以在bean A上使用@DependsOn注解,告訴容器bean B應該先被初始化
要手動獲取spring中的bean對象,這時就需要通過 ApplicationContext
直接注入(Autowired)
構造器方法注入
手動構建類實現接口 @Component
public class SpringContextHolder implements ApplicationContextAware
當一個類實現了這個接口(ApplicationContextAware)之后,這個類就可以方便獲得ApplicationContext中的所有bean。
換句話說,就是這個類可以直接獲取spring配置文件中,所有有引用到的bean對象。
Hbase
1.NoSuchColumnFamilyException
maven管理的依賴,直接修改maven依賴中hbase的版本就可以了
半是由於Hbase client的版本與集群中的Hbase版本不一至造成
2.
o.s.web.servlet.DispatcherServlet Completed initialization in 6 ms
org.apache.hadoop.hbase.security.AccessDeniedException: org.apache.hadoop.hbase.security.AccessDeniedException:
Insufficient permissions for user 'aa' (table=dmin:test_result, action=READ)
//設置當前window/linux下用戶為HBase可訪問用戶
System.setProperty("HADOOP_USER_NAME", "bb");
System.setProperty("HADOOP_GROUP_NAME", "bb");
參考:
SpringBoot中注入ApplicationContext對象的三種方式 https://blog.csdn.net/Abysscarry/article/details/80490624