IOC
DI
(1)set 注入
(2)constructor 注入
类类型属性赋值
(1)外部 bean
(2)内部 bean 只能在当前bean内使用,无法被 ioc 直接调用
依赖注入 List
依赖注入 Map![](https://i-blog.csdnimg.cn/blog_migrate/0f701648b948ecc74423bfab205da7b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d0f9aa8a1aec56b43edb9173a15dfd18.png)
数据源管理和 properties 引入
bean 作用域
bean 生命周期
(1)实例化(2)依赖注入(3)后置处理器before(4)初始化(5)after(6)销毁(ioc关闭)
bean 作用域对生命周期的影响
单例:获取 ioc 容器时 实例化、依赖注入、初始化
多例:获取 bean 时 实例化、依赖注入、初始化
后置处理器
会在初始化的前后添加额外操作,对 ioc 中的所有 bean都会执行
FactoryBean
autowire 自动装配(基于xml)
(1)byType
(2)byName
byType 找到的类型匹配的有多个时,可以用byName
byName 将要赋值的属性的属性名作为 bean 的 id 去 ioc 容器里找
注解管理 bean 和组件扫描
(1)@Component普通组件 @Controller控制层组件
@Service业务层组件 @Repository持久层组件
本质上没区别,三个是 component 的别名
注解扫描方式配置的 bean 的 bean id 是类名的小驼峰
可以在注解后加个()自定义 bean id 比如 @Controller("mycontroller")
@Autowried 自动装配(基于注解)
(1)标在成员变量上
(2)标在set上
(3)标在给成员变量赋值的有参构造上
@Autowried 默认通过 byType , 不行就 byName
俩都不行(bytype找到多个类型符合的,byName又对不上id)的话
可以加个注解 比如 @Qualifier("userServiceImpl") 根据注解的 value 找 id
动态代理
(1)jdk 必须有接口,生成的代理类和目标类实现相同接口 在com.sun.proxy下
(2)cglib 生成的代理类会继承目标类,和目标类在一个包下
@Aspect
(1)开启基于注解的 AOP
(2)获取参数,连接点重用
(3)@Before 前置通知
@AfterReturning 返回通知
@AfterThrowing 异常通知
@After 后置通知 (spring5.3前先后置,然后返回或异常)
(4)环绕通知
切面优先级
通过@Order设置切面优先级,value越小优先级越高,默认值为 Integer的最大值
JdbcTemplate
事务管理器
事务属性
(1)只读属性
(2)超时时间
(3)回滚策略
(4)隔离级别
(5)传播行为