一、Spring IOC 的自动装备属性
两种方式 :
第一种 autowire="byName" 自动装配 根据bean的 setter和getter 名称进行匹配 匹配到了 直接装配。
第二种 autowire="byType" 自动装配 根据bean的属性类型 即class类型相同 但是不能有一个以上的相同类型
<bean id="address" class="xyz.yangjian.spring.demo.autowire.Address"
p:city="Beijing" p:street="LongZe"></bean>
<bean id="car" class="xyz.yangjian.spring.demo.autowire.Car"
p:brand="Audi" p:price="300000"></bean>
<!-- 手动装配 -->
<bean id="person" class="xyz.yangjian.spring.demo.autowire.Person"
p:name="Mike" p:address-ref="address" p:car-ref="car"></bean>
<!-- 自动装配 两种方式 -->
<!-- 第一种 byName 根据 bean的名字和当前bean的setter getter 方法名进行匹配 -->
<bean id="person1" class="xyz.yangjian.spring.demo.autowire.Person"
p:name="YangJian" autowire="byName"></bean>
<!-- 第二种 byType 根据 bean 的属性类型进行自动装备 但是不能有 一个以上的相同类型class -->
<bean id="person2" class="xyz.yangjian.spring.demo.autowire.Person"
p:name="jessy" autowire="byType"></bean>
结果
Person [name=Mike, address=Address [city=Beijing, street=LongZe], car=Car [brand=Audi, price=300000.0]]
Person [name=YangJian, address=Address [city=Beijing, street=LongZe], car=Car [brand=Audi, price=300000.0]]
Person [name=jessy, address=Address [city=Beijing, street=LongZe], car=Car [brand=Audi, price=300000.0]]
二、Spring 的bean 之间的关系 relation
第一种关系 继承 parent="" 继承父类的所有属性
<!-- abstract="true" 设置bean 为抽象的 不能被实例化 可以当成模板 -->
<bean id="address"
p:city="Beijing!" p:street="HuiLongGuan" abstract="true"></bean>
<!-- parent 是继承关系 会集成address 的所有属性 -->
<bean id="address2" class="xyz.yangjian.spring.demo.autowire.Address"
parent="address"></bean>
第二种关系 依赖
<bean id="car" class="xyz.yangjian.spring.demo.autowire.Car"
p:brand="Audi" p:price="300000"></bean>
<!-- depend-on 依赖属性 必须有一个关联的car 换句话说这个person 必须依赖于car 这个bean-->
<bean id="person" class="xyz.yangjian.spring.demo.autowire.Person"
p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
运行结果
Address [city=Beijing!, street=HuiLongGuan]
Person [name=Tom, address=Address [city=Beijing!, street=HuiLongGuan], car=null]
三、Spring 的作用域 scope
两种 第一种 singleton 单例 第二种 prototype 原型
<!-- 使用 bean 的scope 属性来配置bean作用域
singleton : 默认值 容器初始化时创建bean 实例 再整个容器的生命周期内只创建一个bean 单例的
prototype : 原型的 容器初始化时不会创建bean 创建实例对象时会创建一个新的bean 并返回
-->
<bean id="car" class="xyz.yangjian.spring.demo.autowire.Car"
scope="prototype">
<property name="brand" value="Audi"/>
<property name="price" value="300000"/>
</bean>
运行结果
singleton 单例
ApplicationContext ac = new ClassPathXmlApplicationContext("beans-scope.xml");
在构建容器的时候 就调用构造方法
Car 构造方法打印 : 我是car构造器
prototype 原型
ApplicationContext ac = new ClassPathXmlApplicationContext("beans-scope.xml");
Car car1 = (Car) ac.getBean("car");
Car car2 = (Car) ac.getBean("car");
System.out.println(car1 == car2);
每创建一次对象 调用一次构造器 创建新的实例
控制台打印结果:
我是car构造器
我是car构造器
false