Spring 学习笔记(三)

一、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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值