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;
}
}
class School {
private String name;
private String address;
public School() {
}
}
resources包内创建applicationContext.xml文件
<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>
<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对象)与注入的对象的类型是接口和实现类