Spring01 IOC

Spring

实现IOC的两种方式

1)基于xml的实现
2)基于注解的是心啊

基于xml的IOC实现

pojo包内定义实体类Student和School
class Student {
	private String name;
	private int age;
	private School school;
	
	public Student() {
	}
	
	public Student(String name, Integer age, School school) {
		this.name = name;
		this.age = age;
		this.school = school;
	}
	
	//省略 setter/getter/toString...
}

class School {
	private String name;
	private String address;
	
	public School() {
	}
	
	//省略 setter/getter/toString...
}
resources包内创建applicationContext.xml文件
  • setter注入
<!-- 使用<bean>标签创建对象,使用<property>标签进行依赖注入 -->
<!-- 简单类型注入值使用value属性,引用类型注入值使用ref属性 -->
<!-- 使用<property>标签注入值,要求类中必须有对应属性的setter属性 -->
<beans>
	<bean class="icu.sandink.pojo.Student" id="student">
		<property name="name" value="牧羊"/>
		<property name="age" value="22"/>
		<!--引用类型注入-->
		<property name="school" ref="school"/>
	</bean>

	<bean class="icu.sandink.pojo.School" id="school">
		<property name="name" value="五道口职业技术大学"/>
		<property name="address" value="北京"/>
	</bean>
</beans>
引用参数自动注入(仅setter注入可用)
<!-- 如果成员变量是引用类型,则可以使用自动注入属性 -->
<beans>
	<bean class="icu.sandink.pojo.School" id="school">
		<property name="name" value="五道口职业技术大学"/>
		<property name="address" value="北京"/>
	</bean>

	<!--按名称注入-->
	<bean class="icu.sandink.pojo.Student" id="student" autowire="byName">
		<property name="name" value="牧羊"/>
		<property name="age" value="22"/>
	</bean>
	<!--按类型注入-->
	<bean class="icu.sandink.pojo.Student" id="student" autowire="byType">
		<property name="name" value="牧羊"/>
		<property name="age" value="22"/>
	</bean>
</beans>
  • 构造方法注入

<beans>
	<!--使用构造方法参数名称注入值-->
	<!--name要和构造方法中的参数相匹配-->
	<bean class="icu.sandink.pojo.Student" id="student">
		<constructor-arg name="name" value="牧羊"/>
		<constructor-arg name="age" value="22"/>
	</bean>

	<!--使用构造方法参数下标注入值-->
	<bean class="icu.sandink.pojo.Student" id="student">
		<constructor-arg index="0" value="牧羊"/>
		<constructor-arg index="1" value="22"/>
	</bean>

	<!--使用构造方法参数默认的顺序注入值-->
	<bean class="icu.sandink.pojo.Student" id="student">
		<constructor-arg value="牧羊"/>
		<constructor-arg value="22"/>
	</bean>
</beans>

基于注解的IOC实现

创建对象的注解
    @Component: 可以创建任意对象,对象的名称是类名的驼峰命名法
    @Controller: 专门用来创建界面层对象的注解
    @Service: 专门用来创建业务逻辑层对象的注解
    @Repository: 专门用来创建数据访问层的对象的注解
依赖注入的注解
    简单类型赋值
        @Value
    引用类型赋值
        @Autowired: 引用类型按类型赋值
        
        @Autowired
        @Qualifier("名称"): 两个注解一起使用,引用类型的按名称注入
    
    引用类型的注入存在同源类型的注入
    同源类型是指:
        被注入的对象类型(Student中的school对象)与注入的对象的类型完全一致
        被注入的对象类型(Student中的school对象)与注入的对象的类型是父子类
        被注入的对象类型(Student中的school对象)与注入的对象的类型是接口和实现类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值