第一章:Spring概述、特点、IOC容器、IOC操作bean管理(基于xml方式)
1.Spring是什么?
①Spring是一款主流的java EE 轻量级开源框架。
②广义的Spring:Spring技术栈,Spring不再是一个单纯的应用框架,而是逐渐发展成由多个不同子项目组成的成熟技术。例如:Spring Framework、SpringMVC,SpringBoot等。
③狭义的Spring:特指Spring Framework。Spring框架是一个分层的、面向切面编程的java应用程序,有两个核心模块Ioc和AOP。
④Ioc:控制反转,把创建对象过程交给Spring进行管理。
⑤AOP:面向切面编程。不修改源代码进行功能的增强。
2.Spring特点:
①方便解耦,简化开发。
②AOP编程的支持。
③方便程序的测试。
④方便集成各种优秀框架。
⑤降低Java API开发难度。
⑥方便进行事务操作。
3.IOC容器:
(1)什么是IOC:
①控制反转,把对象的创建和对象之间调用的过程,交给spring处理。
②使用IOC的目的:为例耦合度降低。
(2)IOC底层原理:
①XML解析、工厂模式、反射。
②IOC容器底层就是对象工厂。
③spring提供IOC容器实现的两种方式(两个接口)
BeanFactory:IOC容器基本实现,是spring内部的使用接口,不提供开发人员进行使用(加载配置文件的时候不会创建对象,在获取/使用对象的时候才去创建对象)。
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用(加载配置文件的时候就会把在配置文件中的对象创建)。
④ApplicationContext接口实现类:
FileSystemXmlApplicationContext和ClassPathXmlApplicationContext
4.IOC操作bean管理:
①bean管理指的是两个操作:spring创建对象;spring注入属性。
②bean管理操作有两种方式:基于XML配置文件方式实现;基于注解方式实现。
5.IOC操作bean管理(基于XML方式):
(1)基于XML创建对象:
<bean id="user" class="spring1.User"></bean>
①在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建。
②在bean标签中有很多属性,介绍常用属性:
id属性:唯一标识
class属性:类的全路径(包和类的路径)
name属性:和id属性一样,name属性内容可以加特殊符号
③创建对象的时候,默认也是执行无参构造方法,完成对象创建。
(2)基于XML方式注入属性:
①DI:依赖注入,就是注入属性。(DI是IOC中一种具体实现,称为依赖注入,就是注入属性。注入属性要在创建对象的基础之上注入)
第一种方式:set方式注入。
1.创建属性和属性对应的set方法;
//1.创建属性
private String bname;
private String bauthor;
//2.创建属性对应的set方法
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
2.在spring配置文件配置对象创建,配置属性注入。
<bean id="book" class="spring1.Book" >
<!--使用property完成属性注入
name:类里面的属性名称
value:向属性注入的值
-->
<property name="bname" value="java从入门到精通"></property>
<property name="bauthor" value="宋红康"></property>
</bean>
@Test
public void testBook1(){
//1.加载spring配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
Book book = applicationContext.getBean("book", Book.class);
System.out.println(book);
book.testDemo();
}
第二种注入方式:使用有参数的构造器注入。
1.创建类,定义属性,创建属性对应有参的构造方法;
public class Orders {
private String oname;
private String address;
public Orders(String oname, String address) {
this.oname = oname;
this.address = address;
}
}
2.在spring配置文件中配置。
<!--有参构造注入属性-->
<bean id="orders" class="spring1.Orders">
<constructor-arg name="oname" value="电脑"></constructor-arg>
<constructor-arg name="address" value="中国"></constructor-arg>
</bean>
@Test
public void testOrders(){
//1.加载spring配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
Orders orders = applicationContext.getBean("orders", Orders.class);
System.out.println(orders);
orders.orderTest();
}