Spring深入浅出(一)IOC的基本知识

Spring前言 Spring是一个企业级开发框架,为解决企业级项目开发过于复杂而创建的,框架的主要优势之一就是分层架构,允许开发者自主选择组件。 Spring的两大核心机制是IOC(控制反转)和AOP(面向切面编程),从开发的角度讲,我们使用Spring框架就是用它的IOC和AOP。 IOC是典型的工厂模式,通过工厂去注入对象。 AOP则是代理模式的体现。 IOC控制反转 IOC也叫控制反转,首先从字面意思理解,什么叫控制反转?反转的是什么? 在传统的程序开发中,需要调用对象时,通常由调用者来创建被调用者的实例,即对象是由调用者主动使用new关键字出来的。 但在Spring框架中创建对象的工作不再由调用者来完成,而是交给IOC容器来创建,再推送给调用者,整个流程完成反转,所以是控制反转。也就是 例如:买礼品。 传统方式:你去礼品店,需要自己去挑,然后自己带回来。 IOC:你只需要把需要的东西的清单放在家门口,然后就像圣诞老人一样将礼物放到你们的门口,你可以直接拿到用就行。 IOC的代码描述与解释 通过传统方式创建并且实例化一个对象 1.传统模式去生成一个人的对象,有属性和set/get方法 复制代码 public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 复制代码 2.在测试方法中去实例化Person对象 复制代码 public class Test { public static void main(String[] args) { Person p = new Person(); System.out.println(p); } } 复制代码 通过Spring的方式去创建并且实例化一个对象 准备工作: 1.添加Spring相关jar包。 2.创建配置文件,可以自定义文件名applicationContext.xml。 3.调用API。 复制代码      复制代码 复制代码 public class Test { public static void main(String[] args) { //1.加载spring的配置文件,生成ApplicationContext对象。 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.调用ApplicationContext的getBean方法获取对象,通过在配置文件中的bean的id值获取对象 Person p = (Student) applicationContext.getBean("p"); System.out.println(p); } } 复制代码    程序在加载spring的配置文件的时候创建person对象,通过反射机制调用无参构造函数,所以要求交给IOC容器管理的类必须有无参构造函数。此时的person对象的属性全部为空,因为调用无参构造只会创建对象而不会进行赋值,如何赋值呢? 给实体类赋初始值(无参构造的方式) 添加property标签:name对应实体类中的属性名,value是需要赋予属性的初始值。可以在property标签中使用其属性名,也可以在property中使用value标签 注意: (1)若包含特殊字符,比如 name="",需要使用]]>进行配置。     (2)Spring是通过调用每个属性的setter方法来完成属性的赋值。所以实体类必须有setter方法,否则加载时报错,getter方法可写可不写。 复制代码      ]]> 复制代码 调用方法与上面一样,就不再描述了。需要注意的如下: 复制代码 //1、第一种方式,使用配置文件中的id,这也是最常用的方式 Person p = (Student) applicationContext.getBean("p"); //2、第二种方式,直接使用类名,但是如果在配置文件中有两个bean都是由Student类生成的,IOC容器无法将两个bean都返回,必须指定一个唯一的bean。因此不推荐使用 Person p = (Student) applicationContext.getBean(Person.class); 复制代码 给实体类赋初始值(有参构造的方式) 1.创建一个实体类 2.在配置文件中的属性写法 3.实例化 复制代码 //实体类 public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Person(int id, String name,) { super(); this.id = id; this.name = name; } } 复制代码 复制代码 复制代码 IOC容器管理多个对象 复制代码 //创建一个班级类 public class Classes { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } //创建一个学生类 public class Student { private int id; private String name; private Classes classes; public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 复制代码 复制代码 复制代码   在spring的配置文件中,通过ref属性将其他bean赋给当前bean对象,这种方式叫做依赖注入(DI),DI也是Spring中IOC的重要一环,所以一般说的IOC包括DI。 在实体类中包含Array,List,Map的赋值 复制代码 public class Classes { private int id; private String name; private List students; public List getStudents() { return students; } public void setStudents(List students) { this.students = students; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 复制代码 复制代码 复制代码 上述描述了集合属性通过list标签和ref标签完成注入(数组与list一样)。 ref的bean属性指向需要注入的bean对象。 Set,Map,Properties等集合的方式与list相同,只是标签不同,分别是,, 总结 IOC是Spring的核心,很重要。使用Spring开发项目时,控制层,业务层,DAO层都是通过IOC来完成依赖注入(DI)的。https://www.cnblogs.com/JiangLai/p/9561435.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信