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