1. IOC基本概念:
- 控制反转(Inversion of Control,缩写为IoC)
- 使用IOC目的是为了降低耦合度
2. IOC底层原理
- xml解析、工厂模式、反射
3. IOC(接口)
1. BeanFactory:
IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。
区别:(加载配置文件时不创建对象,在获取对象(使用时)才创建对象)
2. ApplicationContext(一般用这种方式):
BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用。
区别:(加载配置文件时就会把配置文件对象进行创建)
3. IOC操作Bean管理
1. 什么是Bean管理
- Spring创建对象
- Spring注入属性
2. Bean管理的实现方式
1. 基于 xml 配置文件方式实现
-
创建对应的
bean.xml
文件中使用bean
标签,标签里添加对应的属性,即可实现对象的创建。 -
创建对象的时候也是默认执行无参构造器完成对象创建。
-
x 1<!--配置User对象创建-->2<bean id="user" class="com.wnaoii.User"/>
-
在Bean标签中有许多属性,这里介绍下常用属性
- id属性:唯一标识,在bean中生成对象的别名。
- class属性:类全路径(包类路径)
2. 基于 xml 方式注入属性
-
使用
set
方法注入-
常规方式
public class Book { // 创建属性 private String bname; // 属性对应的set方法 public void setBname(String bname) { this.bname = bname; } public static void main(String[] args) { // 建对象 Book book = new Book(); // 注入值 book.setBname("xiaoming"); System.out.println(book.bname); } }
-
xml配置文件方式
-
写好xml配置文件
<!--配置User对象创建--> <bean id="book" class="com.wnaoii.Book"> <!-- 在bean标签中使用property完成属性注入 name:类里属性的名字 value:需要注入的值 --> <property name="bname" value="xiaoming"></property> </bean>
-
调用xml配置文件
public class TestSpring5 { @Test public void testAdd() { // 1.加载spring配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); // 2.获取配置创建的对象 Book book = context.getBean("book",Book.class); // getBean中”book“为xml配置的对象,Book.class表示转换的类型 book.pringtName(); System.out.println(book); } }
-
-
-
有参构造注入
-
常规方式
public class Book { // 创建属性 private String bname; public Book() { } // 有参构造 public Book(String bname) { this.bname = bname; } public static void main(String[] args) { // 建对象,有参构造注入值 Book book = new Book("xiaogang"); System.out.println(book.bname); } }
-
xml配置文件方式
-
创建类,定义属性,创建对应的有参构造器
public class orders { private String oname; private String address; // 无参构造不写也行? public orders() { } // 有参构造 public orders(String oname, String address) { this.oname = oname; this.address = address; } }
-
配置好xml配置文件里的Bean标签
<!-- 在bean标签中使用constructor-arg完成属性注入 name:类里属性的名字 value:需要注入的值 --> <bean id="orders" class="com.wnaoii.Orders"> <constructor-arg name="oname" value="手机"></constructor-arg> <constructor-arg name="address" value="中国"></constructor-arg> </bean>
-
测试类中测试
public class TestSpring5 { @Test public void testOrders() { // 1.加载spring配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); // 2.获取配置创建的对象 Orders orders = context.getBean("orders", Orders.class); orders.testOrders(); System.out.println(orders); } }
-
-
-
P名称空间注入(了解)
- 使用 p 名称空间注入,可以简化基于 xml 配置方式
3. 基于注解方式实现
- DI:依赖注入,就是注入属性