Spring学习主要是学习Spring容器的两个特性:IOC和AOP。
IOC全称Inverse of Control(控制反转)
在类和类之间存在控制权,控制权指的是对象的创建和使用,比如有类 A 和类 B, 我们之前的做法是在 A 中调用 B, 那么控制权就在 A 中,这样做的耦合度较高,如果修改了 B,A 也要做相应修改。
引入 Spring 框架后,控制权由 spring 容器来负责。当 A 想使用 B 时,需要由 Spirng 容器通过配置文件进行注入。这种思想就是 IoC(为了更好的理解,我们可以这样认为,对象创建和使用的控制权转移到了 Spring 容器,由 Spring 容器来控制)。
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在未修改源代码的前提下给程序动态统一添加功能的一种技术。
Struts2 中的拦截器,就是使用 AOP 的思想。使用 AOP 思想编写程序,会是程序更加灵活。
一般而言,使用 Spring 框架的主要作用:我们会使用 IoC 整合组件(各种 Bean),使用 AOP 来管理事务。和 Hibernate 相同,Spring 的使用也没有限制,可用于 Web 工程和普通 Java 程序。
---------------------------------------------------------------------------------------------------------------------
spring配置文件中
<bean id = "......" class="AAA">
<property name="xxx" ref="BBB"></property>------此时的name名称要与类AAA中定义的类BBB的名称相同
</bean>
读取spring配置文件的两种方式:
1、方式一
如果配置文件在项目src目录下:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserBean ub = ac.getBean("userBean");
如果配置文件在硬盘上:
ApplicationContext ac1 = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
UserBean ub = ac.getBean("userBean");
2、方式二
如果配置文件在项目src目录下:
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory af = new XmlBeanFactory(resource);
UserBean ub = af.getBean("userBean");
如果配置文件在硬盘上
Resource resource1 = new FileSystemResource("D:/applicationContext.xml");
BeanFactory af1 = new XmlBeanFactory(resource);
UserBean ub = af.getBean("userBean");
--------------------------------------------------------------------------------------------------------------------
Spring容器对Bean组件的管理
1、Bean对象的创建时机
默认是随着容器的创建而创建,可以使用lazy-init="true"(在调用getBean创建)延迟创建,也可以用<beans default-lazy-init="true" />批量延迟创建。
2、Bean对象的创建模式
默认是单例模式,也可以使用scope属性改变
scope="singleton":单例,每次调用getBean返回同一个
scope="prototype":原型,每次调用getBean返回一个新的
------------------------------------------------------------------------------------------------------------------
DI依赖注入
DI(依赖注入)是 IoC 实现的重要技术,有如下 2 中方式:
1) setter 方式注入
2) 构造方式注入
注入类型有如下几种:简单值、集合、bean 对象
IOC和 DI 的关系?
我们认为 Spring 是具有 IOC 特性的框架。
实现 IOC 是由 Spring 容器来完成的,Spring 容器通过依赖注入 DI 建立起对象(组件、Bean)之间的关系。
我们可以这样理解:DI 是 IOC实现的一种手段,IOC 通过 DI 来实现。
------------------------------------------------------------------------------------------------------------------
注解方式配置