下面是关于“Spring(二):Spring通过IOC来创建对象”的完整攻略:
一、什么是IoC
IoC(Inversion of Control),即“控制反转”,是一种设计模式和思想。其主要思想是:将对象的创建、依赖注入等操作由程序员手动实现转化为由容器自动创建和注入,而程序员只需要定义好需要的组件和依赖关系,Spring容器就会负责管理、创建和注入对象,从而实现对象的反转和控制的反转。
二、常见的IoC容器
Spring框架中常用的IoC容器有两种:BeanFactory和ApplicationContext。BeanFactory是Spring框架的基础设施,功能较弱,加载配置文件后不会创建Bean实例,而ApplicationContext是BeanFactory的子接口,是Spring中较为常用的IoC容器,除了BeanFactory的基本功能外,还提供了其他的功能支持,如国际化、事件通知、资源加载、AOP等。
三、IoC容器的基本使用
1. 创建IoC容器
要使用IoC容器,首先需要在项目中引入spring-context依赖,然后在代码中创建IoC容器,如下所示:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
这里以ApplicationContext为例,创建一个ClassPathXmlApplicationContext实例,传入的参数是配置文件的路径,容器就会根据配置文件中的配置信息自动创建Spring Bean实例并注入依赖。
2. 使用Bean
容器中的Bean创建完成后,可以使用getBean()方法来获取一个Bean的实例,如下所示:
Student student = context.getBean("student", Student.class);
这里以获取一个名为“student”的Bean实例为例,调用getBean()方法即可。
3. 配置Bean
可以通过在配置文件中配置Bean信息,告诉Spring容器需要创建哪些Bean,以及它们的依赖关系等,具体配置方法见下面的示例。
四、通过示例了解IoC的使用
下面,我们通过两个示例,了解IoC容器的使用。
1. 示例一:创建Bean
首先,在项目的classpath路径下创建一个名为applicationContext.xml的配置文件,配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student1" class="com.example.Student">
<property name="name" value="小明"/>
<property name="age" value="18"/>
</bean>
</beans>
上面的配置文件中,定义了一个id为“student1”的Bean,其class为com.example.Student,同时还注入了两个属性。在代码中,可以通过如下方式获取Bean实例并访问属性:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = context.getBean("student1", Student.class);
System.out.println(student.getName()); // 输出:小明
System.out.println(student.getAge()); // 输出:18
2. 示例二:注入依赖
在示例二中,我们创建了两个Bean,一个是Student,一个是Teacher,Teacher依赖于Student,其中Stduent的id为“student”,Teacher的id为“teacher”,代码和配置文件如下所示:
public class Student {
private String name;
private int age;
public Student(){}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class Teacher {
private String name;
private Student student;
public Teacher(){}
public void setName(String name) {
this.name = name;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public Student getStudent() {
return student;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="student" class="com.example.Student">
<property name="name" value="小明"/>
<property name="age" value="18"/>
</bean>
<bean id="teacher" class="com.example.Teacher">
<property name="name" value="张老师"/>
<property name="student" ref="student"/>
</bean>
</beans>
在代码中,可以通过如下方式获取Teacher实例,并访问其中的属性:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher teacher = context.getBean("teacher", Teacher.class);
System.out.println(teacher.getName()); // 输出:张老师
System.out.println(teacher.getStudent().getName()); // 输出:小明
五、总结
通过上面的示例,我们可以看到,使用Spring的IoC容器可以让我们将对象创建和依赖注入的工作交给Spring容器来处理,从而降低了程序员的工作量,提高了代码的可读性和可维护性。同时,Spring的IoC容器支持各种配置方式,如xml、注解、Java Config等,让我们更灵活地使用Spring框架。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring(二):Spring通过IOC来创建对象 - Python技术站