Spring框架自学之路(四)

在第一篇教程里(Spring框架自学之路(一))我们学习了框架概述、为MyEclipse配置Spring的约束、IOC(DI) - 控制反转(依赖注入)的实现原理以及入门案例。

在第二篇教程里(Spring框架自学之路(二)),讲解了IOC获取对象的方式、别名标签、Spring创建对象的方式等内容。

在第三篇教程里(Spring框架自学之路(三)),学习了单例和多例、懒加载机制、配置初始化和销毁的方法。下面紧接着开始Spring框架第四篇教程的学习。

步骤一:Spring DI

1.IOC(DI) - 控制反转(依赖注入)

所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周期的管理,而是在需要时由Spring框架提供,这个由spring框架管理对象创建和生命周期的机制称之为控制反转。而在 创建对象的过程中Spring可以依据配置对对象的属性进行设置,这个过称之为依赖注入,也即DI。

2.set方法注入

通常的javabean属性都会私有化,而对外暴露setXxx()getXxx()方法,此时spring可以通过这样的setXxx()方法将属性的值注入对象。

a.Spring内置的可直接注入类型的注入:

<code>import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List<string> jobs;
private Set<string> set;
private Map<string> map;
private Properties prop;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List<string> jobs) {
this.jobs = jobs;
}
public void setSet(Set<string> set) {
this.set = set;
}
public void setMap(Map<string> map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs
+ ", set=" + set + ", map=" + map + ", prop=" + prop + "]";
}
}/<string>/<string>/<string>/<string>/<string>/<string>/<code>


<code>
<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-3.2.xsd"
>

<bean>
<property>
<property>
<property>
<list>
<value>上单/<value>
<value>打野/<value>
<value>辅助/<value>
<value>中单/<value>
/<list>
/<property>
<property>

<value>aaa/<value>
<value>bbb/<value>
<value>ccc/<value>
<value>aaa/<value>

/<property>
<property>

<entry>
<entry>
<entry>
<entry>

/<property>
<property>
<props>
<prop>v1/<prop>
<prop>v2/<prop>
<prop>v3/<prop>
<prop>v4/<prop>
/<props>
/<property>
/<bean>
/<beans>/<code>
<code>@Test
/**
* SpringDI set方式属性注入 - Spring内置的可直接注入类型的注入
*/
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

Hero hero = (Hero) context.getBean("hero");
System.out.println(hero);
}/<code>

b.非Spring内置的可以直接注入类型的注入:

<code>
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class Hero {
private int id;
private String name;
private List<string> jobs;
private Set<string> set;
private Map<string> map;
private Properties prop;
private Dog dog;
private Cat cat;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJobs(List<string> jobs) {
this.jobs = jobs;
}
public void setSet(Set<string> set) {
this.set = set;
}
public void setMap(Map<string> map) {
this.map = map;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public void setCat(Cat cat) {
this.cat = cat;
}
@Override
public String toString() {
return "Hero [id=" + id + ", name=" + name + ", jobs=" + jobs

+ ", set=" + set + ", map=" + map + ", prop=" + prop + ", dog="
+ dog + ", cat=" + cat + "]";
}
}/<string>/<string>/<string>/<string>/<string>/<string>/<code>

3.基于构造方法的注入

对象属性设置的另一种方式是在对象创建的过程中通过构造方法传入并设置对象的属性。spring也可以通过这样的构造方法实现属性的注入。

<code>public class Student {
private int id;
private String name;
private Dog dog;
public Student(int id, String name, Dog dog) {
this.id = id;
this.name = name;
this.dog = dog;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", dog=" + dog + "]";
}
}/<code>
<code>
<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-3.2.xsd"
>
<bean>

<constructor-arg>
<constructor-arg>
<constructor-arg>
/<bean>
<bean>
/<beans>/<code>

4.自动装配

在Spring的set方式实现的注入过程中,支持自动装配机制,所谓自动装配机制,会根据要设置的javabean属性的名字 或 类型 到spring中自动寻找对应id 或 类型的<bean>进行设置,从而 省去依次配置的过程,简化了配置。为 指定<bean>开启自动装配:/<bean>/<bean>

<code>
<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-3.2.xsd"
>

<bean>
<bean>
<bean>
/<beans>/<code>

关注公众号【秃头程序员】,不错过Spring框架自学之路(四)


分享到:


相關文章: