了解过设计模式的人都知道一个非常经典的设计模式——工厂设计模式。即所有的对象创建工作都交给工厂完成,是一个典型的面向接口编程模式。它比直接new来创建对象更为合理,如果直接new创建对象,会导致调用者与被调用者的硬编码耦合;而工厂模式将用户创建的责任转给了工厂,形成了调用者与被调用者的接口耦合。这样的工厂模式确实比原始的创建对象方式好很多。但,正如之前所说的,工厂模式仅是将责任推给了工厂,它造成了调用者与被调用者工厂的耦合。
Spring框架则避免了调用者与工厂之间的耦合,通过Spring容器的“宏观调控”,调用者只需要被动地接收Spring为调用者的成员赋值即可,不需要主动获取被依赖对象。这种被动获取方式就叫做“依赖注入”当然,也应用了IOC(控制反转)思想。
依赖注入,说白了便是创建Bean对象。在学习如何注入前,先看一个例子,以便于更好理解Bean:
Spring依赖注入共分为三类四种:
1. Set注入【重点】依赖注入的本质便是Set注入。
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性由容器来注入
【环境搭建】
- 创建复杂引用类型对象
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- 创建真实测试对象
public class Student {
private String name;
private Address address;
private String[] books;
private List hobbies;
private Map card;
private Set games;
private String wife;
private Properties info;
}
- 配置Beans.xml文件
- 测试类
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
Student bean = (Student) context.getBean("Student");
System.out.println(bean.getName());
}
- 完善注入信息
三国演义 红楼梦 水浒传 西游记
听歌 打游戏 看书 LOL COC EVE 2013101043 男 User 123456
2. 构造器注入
a. 使用无参方式创建对象(默认创建方式)
b. 使用有参方式创建对象
(1)下标赋值
(2)类型赋值(不建议使用)
(3)参数名赋值(最常用)
构造器注入并不是最完美的注入方案,可能出现依赖循环的问题。
除了上述两种注入方式外,还可以使用命名空间注入。
官方解释:
c和p命名空间并不能直接使用,在使用前需要提前导入XML约束。
xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
注入实例
测试类
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
User user = context.getBean("user", User.class); //显式声明数据类型后可不进行强转
System.out.println(user);
}



