Java Spring 知识点总结
Spring 核心思想
IOC(Inverse Of Control)反转控制:以前对象的创建是由开发人员自己维护的,包括依赖关系也是自己注入的。使用Spring 后,对象的创建以及依赖关系的注入可以交给 Spring 来完成。反转控制就是将对象的创建反转给了程序自己控制。
DI(Dependency Injection)依赖注入:DI 需要有IOC 环境,IOC 又需要DI 进行依赖注入;Spring 创建
IoC 控制反转,指将对象的创建权,反转到 Spring 容器 , DI 依赖注入,指 Spring 创建对象的过程中,将对象依赖属性通过配置进行注入
WEB 项目中如何使用 Spring
在一个web 项目中,我们 spring 容器对象只会创建一个,该容器的生命周期应该与 web 项目一致,Spring 框架自带了一个 ServletContextListener 类型的监听器,类名为 ContextLoaderListener,它实现了 ServletContextListener 接口,所以我们只需要在 web.xml 文件中配置该 Listener,则可以实现随项目启动。因为在项目启动时创建 ServletContext 时就会触发该监听器,在该监听器中自动创建了 Spring 容器对象(ApplicationContext),并将该对象放入了 ServletContext 域中,所以我们在 Web 项目中都可以通过 ServletContext 域获得 Spring 容器对象。
如何获取 ServletContext 域中的 ApplicationContext 对象?
Spring 的核心类
ApplicationContext 接口:每次容器启动时就会创建容器中配置的所有对象.并提供更多功能
BeanFactory接口和ApplicationContext 接口有什么区别?
①ApplicationContext 接口继承 BeanFactory 接口,Spring 核心工厂是 BeanFactory ,BeanFactory 采取延迟加载,第一次 getBean 时才会初始化 Bean, ApplicationContext 是会在加载配置文件时初始化 Bean。
实现类:
- 从类路径下加载配置文件:ClassPathXmlApplicationContext("applicationContext.xml")
- 从磁盘绝对路径加载配置文件:FileSystemXmlApplicationContext("d:/xxx/yyy/xxx")
Spring Bean 配置
基础属性:
- name:给被管理的对象取个名字,获得对象时根据名称获得对象(name 属性值可以重复,但开发中一般不重复,因为没啥意义)
- class:被管理类的全限定名称
- id:功能与name 属性完全相同,但id 属性必须遵循id 命名规范(名称不可重复,不可使用特殊字符)
进阶属性:
scope 属性:
singleton(默认值):单例对象.被标识为单例的对象在spring 容器中只会存在一个实例
prototype:多例原型,被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象,整合struts2 时,ActionBean 必须配置为多例的。
- request:web 环境下,对象与request 生命周期一致。
- session:web 环境下,对象与session 生命周期一致。
init-method 属性:配置一个方法作为生命周期初始化方法,spring 会在对象创建之后立即调用。
destory-method 属性:配置一个方法作为生命周期的销毁方法,spring 容器在关闭并销毁所有容器中的对象之前调用。
Spring Bean 对象依赖注入的方式
- set 方法注入
复杂类型注入:
数组:
List:
Map:
- 构造函数注入
Spring 注解配置
在使用注解进行配置时,需要开启组件扫描:
将类注册到容器中:
修改对象的作用范围:
值类型注入:
@Value 注解既可以放在字段上,也可以放在 set 方法上。前者采用反射进行注入,后者是使用 set 方法进行的注入。
引用类型注入:
初始化|销毁方法:
什么是 AOP 思想
AOP Aspect Oriented Programming(面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP(面向对象编程)的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
spring 实现 aop 的原理
Spring 中使用了两种动态代理技术,并且优先使用 JDK 自带的动态代理,如果该类没有实现接口,则使用 cglib 代理。
cglib 代理:第三方代理技术,cglib 代理.可以对任何类生成代理.代理的原理是对目标对象进行继承代理. 如果目标对象被 final 修饰.那么该类无法被 cglib 代理。这也就是为什么 Hibernate 技术中实体对象要求不能使用 final 修饰符修饰,因为修饰后就不能通过继承产生动态代理对象了。
Spring 在项目中的作用或特点
- 我认为 Spring 在项目中最大的意义就是代码的解耦,如果某一个类的代码需要更改,我们只需要重新写好后,更改配置文件即可。不需要更改原先写好的代码。
- 使用 Spring 可以真正的做到面向接口编程。
Spring 可以轻松整合其它框架,如果没有 Spring 我们需要手动管理很多类。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: SpringMVC JSON 数据交互
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论