Spring视频学习笔记(一)
Spring视频学习笔记(一)
Spring容器
-
在SpringIOC容器中读取Bean配置创建Bean实例之前,必须对它进行实例化,只有在容器实例化后,才可以从IOC容器中获取Bean实例并使用
Spring提供了两种类型的IOC容器实现
-
BeanFactory.IOC:BeanFactory是Spring框架的基础设施,面向Spring本身;
-
ApplicationContext提供了更多的高级特性,是BeanFactory的子接口;ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory
ApplicationContext的主要实现类
-
ClassPathXmlApplicationContext:从类路径下加载配置文件
-
FileSystemXmlApplicationContext:从文件系统中加载配置文件
ApplicationContext在初始化上下文时就实例化所有单例的Bean;ApplicationContext新增加两个方法refresh()和close(),让ApplicationContext具有启动,刷新和关闭上下文的能力
Spring支持三种依赖注入的方式
- 属性注入(即通过setter方法注入Bean的属性值或者依赖的对象,常用方法;helloword为例)
<!--
配置bean
class:bean的全类名,通过反射的方式在IOC容器中常见bean,所以要求bean中要有无参的构造器
id:标识容器中的bean,id唯一;id可以制定多个名字,名字之间可用逗号分号或者空格分离
-->
<bean id="helloWorld" class="com.wy.spring.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
![](https://images2015.cnblogs.com/blog/1016795/201609/1016795-20160906151626707-7022046.png)
- 构造器注入
public class Car {
private String brand;
private String corp;
private int price;
private int maxSpeed;
public Car(String brand, String corp, int price) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price
+ ", maxSpeed=" + maxSpeed + "]";
}
}
配置文件
<!-- 通过构造法方法来配置bean属性,可以指定参数的位置和参数的类型(type="java.lang.String")以 区分重载的构造器-->
<bean id="car" class="com.wy.spring.Car">
<constructor-arg value="Xuefulan" index="0"></constructor-arg>
<constructor-arg value="beijing" index="1"></constructor-arg>
<constructor-arg value="200000" index="2"></constructor-arg>
</bean>
<!-- 属性值也可以使用属性子节点直接进行配置 -->
<constructor-arg type="java,lang.Stirng">
<value>250</value>
</constructor-arg>
</bean>
当有引用时的配置,以Car和person类为例
public class Person {
private String name;
private int age;
private Car car;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}
}
有引用时的配置
<bean id="person" class="com.wy.spring.Person">
<property name="name" value="jay"></property>
<property name="age" value="25"></property>
<property name="car" ref="car" ></property>
</bean>
![](https://images2015.cnblogs.com/blog/1016795/201609/1016795-20160906151644707-1543473412.png)
- 工厂方法注入