spring ioc就是控制反转的意思(Inversion of Control)
控制反转:创建和管理 bean对象的能力由Spring容器来做,不再由程序开发人员手动创建。
Spring通过依赖注入来管理对象。
控制反转的优点:
1>对象的创建和维护由Spring容器来做,尤其是当对象之间的依赖关系比较复杂的时候,解少了程序员的工作量,也减少了出错的可能性。
2>解耦 由容器去维护具体的对象,对象的创建和业务逻辑分离,让项目代码逻辑更加清晰,更利于维护。
什么是循环依赖:一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。
spring自身可以解决单例的setter注入的循环依赖,主要依靠Spring的三级缓存来解决的。
singletonObjects 一级缓存,用于保存实例化、注入、初始化完成的bean实例
earlySingletonObjects 二级缓存,用于保存实例化完成的bean实例singletonFactories 三级缓存,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象
spring二级缓存理论上来说可以解决循环依赖问题。使用三级缓存可以保证代理对象的循环依赖
protected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) {
Assert.notNull(singletonFactory, "Singleton factory must not be null");
synchronized (this.singletonObjects) {
if (!this.singletonObjects.containsKey(beanName)) {
this.singletonFactories.put(beanName, singletonFactory);
this.earlySingletonObjects.remove(beanName);
this.registeredSingletons.add(beanName);
}
}
}
这段代码发生在createBeanInstance之后,也就是说单例对象此时已经被创建出来(调用了构造器)。这个对象已经被生产出来了,虽然还不完美(还没有进行初始化的第二步和第三步),但是已经能被人认出来了(根据对象引用能定位到堆中的对象),所以Spring此时将这个对象提前曝光出来让大家认识
为啥Spring不能解决构造器的循环依赖。因为加入singletonFactories三级缓存的前提是执行了构造器,所以构造器的循环依赖没法解决
<bean></bean>
bean定义-》beanFactoryPostProcessor-》getbean-》BeanPostProcessor
来进行修改-》bean的单例对象
受精卵-》基因工程-》刚刚出生(人)-》整容变性-》18岁
视图的作用:
1.简化复杂的查询
2.可以进行权限控制,某些列不允许用户查询,可以通过视图开放其中可以查询的列,起到权限控制的作用。
语法:CREATE VIEW 视图名称 AS +正常的sql查询语句。
例子见图:https://blog.csdn.net/yiibai/article/details/80125768
一.查看cpu方面
top 命令查看系统的实时负载, 包括进程、CPU负载、内存使用等等
uptime,系统性能命令的精简版
二.查看内存方面
free -h
free命令默认是显示单位kb,可以采用free -m和free -g命令查看,分别表示MB和GB
三.查看磁盘相关
磁盘剩多少写的快不快可以用df、dd、iotop
du命令用来查看目录或文件所占用磁盘空间的大小。常用选项组合为:du -sh
du常用的选项:
-h:以人类可读的方式显示
-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
-s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
--apparent-size:显示目录或文件自身的大小
-l :统计硬链接占用磁盘空间的大小
-L:统计符号链接所指向的文件占用的磁盘空间大小
du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量
du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
du -sk filename 查看指定文件大小
四.网络相关
ifstat
推荐博客:https://www.cnblogs.com/lzghyh/p/13035675.html
以左表为基准联合查询右表,如果右表中未查询出有匹配的数据,查询结果只展示一条数据,未查出字段展示为null。如果右表中查询出有匹配的数据,匹配出几条数据,查询结果便是几条。
聚集函数
avg
count
max
min
sum
用于处理字符串的函数
合并字符串函数:concat(str1,str2,str3…)
比较字符串大小函数:strcmp(str1,str2)
获取字符串字节数函数:length(str)
获取字符串字符数函数:char_length(str)
字母大小写转换函数:大写:upper(x),ucase(x);小写lower(x),lcase(x)
字符串查找函数
获取指定位置的子串
字符串去空函数
字符串替换函数:
用于处理数值的函数
绝对值函数:abs(x)
向上取整函数:ceil(x)
向下取整函数:floor(x)
取模函数:mod(x,y)
随机数函数:rand()
四舍五入函数:round(x,y)
数值截取函数:truncate(x,y)
用于处理时间日期的函数
获取当前日期:curdate(),current_date()
获取当前时间:curtime(),current_time()
获取当前日期时间:now()
从日期中选择出月份数:month(date),monthname(date)
从日期中选择出周数:week(date)
从日期中选择出周数:year(date)
从时间中选择出小时数:hour(time)
从时间中选择出分钟数:minute(time)
从时间中选择出今天是周几:weekday(date),dayname(date)
推荐博客:https://www.cnblogs.com/progor/p/8832663.html
@EnableAutoConfiguration
@SpringBootConfiguration
@ComponentScan
@AutoConfigurationPackage
@Import
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为Spring Boot的默认配置文件
来自java:comp/env的JNDI属性
java系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
jar包外部的application-{profile}.properties或者application.yml(带spring.profile)配置文件
jar包内部的application-{profile}.properties或者application.yml(带spring.profile)配置文件
jar包外部的application.properties或者application.yml(不带spring.profile)配置文件
jar包内部的application.properties或者application.yml(不带spring.profile)配置文件
@Configuration注解类上的@PropertySource
通过SpringApplication.setDefaultProperties指定的默认属性
定义全局异常处理类。
通过 @ControllerAdvice 指定该类为 Controller 增强类。
通过 @ExceptionHandler 自定捕获的异常类型。
通过 @ResponseBody 返回 json 到前端。
@EnableScheduling引入Schedule的相关配置
@Scheduled(cron = “xxx”)在需要定时执行的方法上添加注解
BeanFactory负责生产和管理Bean的一个工厂接口,提供一个Spring Ioc容器规范。
FactoryBean可以说为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,我们可以在getObject()方法中灵活配置。
FactoryBean是一个接口,当在IOC容器中的Bean实现了FactoryBean后,通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&
实例化->属性赋值->初始化->销毁
销毁在容器关闭时调用