Spring 容器篇
IOC 控制反转
控制:资源的控制权 反转:和传统方式不同
DI 依赖注入
依赖:组件的依赖关系 注入:通过setter方法、构造器等方式自动注入
pom.xml 里 `<packaging>pom</packaging>` 指定当前项目父项目(父项目通常不包含实际项目)
注册
@Bean 把该方法返回的对象注册到spring容器里
Bean spring容器里管理的对象
名称唯一,同名会被覆盖
组件:具有一定功能的对象,是框架的底层配置
组件的四大特性:名字、类型、对象、作用域。(获取组件可通过名字、类型)
组件是单实例的,且在容器启动过程中就会创建组件对象
@Configiuration 告诉spring这是配置类
配置类:分层管理组件的配置,配置类也是容器中的一种组件
@Controller @Service @Repository @Component
spring提供快MVC分层注解
@Controller 控制器
@Service 服务层
@Repository 持久层
都可以看作组件
分层注解起作用的前提:组件必须在主程序所在包及其子包结构下(不在的话可以用conponentscan 组件批量扫描)
@Import 第三方组件导入容器
导入第三方组件也可以@Bean,自己new注册给容器
@Scope 调整组件作用域
@Scope("prototype") 非单实例 ("singleton") 单实例 默认 (request) 同一个会请求单实例 ("session") 同一个会话单实例>
@Lazy 懒加载
什么时候用什么时候加载
FactoryBean 给容器中制造对象
FactoryBean在容器中放的组件类型是接口中泛型指定的类型,组件的名字是工厂自己的名字
@Conditional 条件注册
达到某种条件才放入注解
派生注解
注入
@Autowired 自动装配组件
spring提供支持
原理:spring调用容器getBean
流程 一、 1按照类型,找到组件 2多个按名称去找 3找不到报错 二.也可以把这个类型的所有组件都拿来 三.map也可 四整个容器也可
@Qulifier 精确指定
@Qualifier("名字") 如果容器中这样的组件有多个,且有默认,则使用@Qualifier
@Primary 主组件 (默认组件)
剩下就是备胎,一旦存在改属性,就不能实现组件切换
@Resouce 也是自动装配
java提供支持,通用性更好
构造器注入
spring自动取容器找到构造器所需要的所有参数的组件值
只有一个构造方法不用@Autowired也可注入,多个泽需要
setter方法注入
类似构造器
XXXAware 感知接口
让Bean可以感知到spring容器内部的一些资源或环境变量
@Value 给属性赋值
1.@value("字面值")直接赋值
2.@value(“${}")动态(运行时想要再取)从配置文件中取出某一想的值
3.@value(”#{sqel}“)spring expression laguage spring表达式
@ProperSource
说明属性来源,把指定的文件导入容器中,供我们取值使用
1.classpath:……从自己的项目类路劲下找
2.classpath*:……从所有包的类路径下找
Rescouce Utills 资源工具类 获取资源
.getFile 方法
@Profile 多环境
@Profile(”环境标号“)当这个环境被激活的时候,才会加入如下组件
环境标示:要先定义环境标识再激活 spring.profiles.actives=-------激活环境
默认 default
classPathXmlApplicationContext()
spring原生启动容器
生命周期
@Bean的时候 可以调用初始化/销毁方法
@PostConstruct
@PreConstruct
钩子:生命周期或流程的特定时间点,框架预留给开发者可以插入自己代码的位置,是一种"回调机制"
post 在.....之后
pre 在....之前
BeanPostProcessor 后置处理器
允许在Bean初始化前后Bean进行自定义加工/处理
@Test 单元测试