spring
1. IOC
- Inverse of Control(控制反转),它是一种思想,就是将原本在程序中需要手动创建对象以及对象之间的调用过程的控制权,交由Spring框架来管理。
- IOC的思想是基于IOC容器完成,IOC容器实际上是一个Map, 以配置文件中定义的id属性的值为key,以利用xml解析技术和反射技术实例化出来的对象为value
- 有了IOC容器之后,创建对象的控制权就交给了IOC容器,这样极大的降低了 类与类之间的耦合度。
2. AOP
- 面向切面编程。就是将那些与业务无关,却又被业务所共同调用的功能封装起来(例如事务管理、日志管理、权限控制登)。便于减少系统的代码重复,降低模块间的耦合度
- AOP是基于动态代理。并且存在两种动态代理
- 有接口,使用JDK动态代理,通过创建接口实现类的代理对象,增强类的方法
- 没有接口,使用CGLIB动态代理,通过创建子类的代理对象,增强类的方法
3. Spring中bean的作用域
- singleton: 在Spring IOC容器中仅存在一个Bean实例,spring默认单例模式
- prototype: 每次从容器中调用Bean时,都返回一个新的实例
- request: 每次HTTP请求都会创建一个新的Bean
- session: 在同一个session中共用同一个Bean
4. IOC容器的两种实现方式
BeanFactory接口:IOC容器的基本实现,是spring内部的接口,不提供开发人员进行使用。
加载配置文件时候不会创建对象,获取对象时才会创建对象
ApplicationContext: BeanFactory接口的子接口,面向开发人员。加载配置文件时就创建对象;
ApplicationContext有两个主要的实现类: FileSystemXmlApplicationContext 以及 ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext: 被解析的配置文件地址是带盘符的路径
- ClassPathXmlApplicationContext: 被解析的配置文件地址是类路径下的
5. bean管理
bean管理的两种操作
- 创建对象
- 注入属性
bean管理的两种实现方式
- xml配置文件: 在配置文件中使用 bean 标签,bean标签的两个重要属性 id(唯一标识) 和 class(类的全路径)
- 注解
注入属性
注入属性其实也是依赖注入(DI)
三种注入方式
配置文件
1)set方法注入
2)有参构造注入
注解
3)注解注入
6. spring中bean的两种类型
普通bean 和 工厂 bean
- 普通bean,在配置文件中定义bean的类型就是返回类型
- factoryBean, 实现FactoryBean接口的bean,在配置文件中定义的bean类型和返回值类型不一样.
7. spring中bean的自动装配
- 基于xml配置文件的显示装配;通过bean标签中的 autowire属性配置自动装配,autowire有两个常用值
- byName 注入值bean的id要和类属性名称一样
- byType 根据属性类型注入
- 基于注解的隐式自动装配
- @Autowired 根据属性类型进行自动装配
- @Qualifier 根据名称进行注入(需要和@Autowired一起使用)
- @Resource 可以根据类型注入也可以根据名称注入
- @Value 注入普通类型的属性
8. 创建bean实例的注解
- @Component
- @Service
- @Controller
- @Repository dao层
9 AOP术语
- 连接点 : 类里面哪些方法可以被增强,这些方法称为连接点
- 切入点:实际被增强的方法
- 通知(增强): 实际增强的逻辑部分
- 前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
- 切面: 是一个动作,是把通知应用到切入点的过程;
10. 什么是JdbcTemplate
spring对JDBC进行的封装
spring 中事务实现方式
- 编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
- 基于 TransactionProxyFactoryBean的声明式事务管理
- 基于 @Transactional 的声明式事务管理
- 基于 Aspectj AOP 配置事务
spring中的一些注解
- Bean管理注解
- @Bean
- @Component
- @Service
- Controller
- @Repository
- @ComponentScan 包扫描注解
- @Configuration 配置类注解
- @EnableAutoConfiguration 自动装配注解(springBoot自动配置的核心注解)
- @Import
- @Transactional 事务管理
Spring中Bean的生命周期
- Bean 容器找到配置文件中 Spring Bean 的定义。
- Bean 容器利用 Java Reflection API 创建一个Bean的实例。
- 如果涉及到一些属性值 利用
set()
方法设置一些属性值。- 如果 Bean 实现了
BeanNameAware
接口,调用setBeanName()
方法,传入Bean的名字。- 如果 Bean 实现了
BeanClassLoaderAware
接口,调用setBeanClassLoader()
方法,传入ClassLoader
对象的实例。- 与上面的类似,如果实现了其他
*.Aware
接口,就调用相应的方法。- 如果有和加载这个 Bean 的 Spring 容器相关的
BeanPostProcessor
对象,执行postProcessBeforeInitialization()
方法- 如果Bean实现了
InitializingBean
接口,执行afterPropertiesSet()
方法。- 如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
- 如果有和加载这个 Bean的 Spring 容器相关的
BeanPostProcessor
对象,执行postProcessAfterInitialization()
方法- 当要销毁 Bean 的时候,如果 Bean 实现了
DisposableBean
接口,执行destroy()
方法。- 当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。