一.Spring概念
- Spring是轻量级的开源的JavaEE框架
- Spring可以解决企业应用开发的复杂性
- Spring有两个核心部分:IOC和Aop
IOC:控制反转,把创建对象过程交给spring进行管理
Aop:面向切面,不修改源代码进行功能增强
- 特点
方便解耦,简化开发
Aop编程支持
方便程序测试
方便和其他框架进行整合
方便进行事务操作
降低API开发难度
下载:
spring下载地址
入门案例:
scr/bean1
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/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.xsd">
<!--配置User对象创建-->
<bean id="user" class="com.atguigu.spring5.User"></bean>
</beans>
User
public class User {
public void add(){
System.out.println("add......");
}
}
testdemo/TestSpring5
public class TestSpring5 {
@Test
public void testAdd(){
// 加载Spring配置文件
ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
// 获取配置创建的对象
User user=context.getBean("user", User.class);
System.out.println(user);
user.add();
}
}
输出:
com.atguigu.spring5.User@3e58a80e
add…
二.IOC容器
1.IOC底层原理
- 什么是IOC
控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
使用IOC目的:降低耦合度
- 底层原理
IOC过程
第一步:xml配置文件,配置创建的对象
<bean id="dao" class="com.atguigu.spring5.UserDao"></bean>
第二步:有service类和dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
String classValue=class属性值; // xml解析
Class clazz=Class.forName(classValue);
return (UserDao) clazz.newInstance();
}
}
2.IOC接口(BeanFactory)
- IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
- Spring提供IOC容器实现的两种方式:
BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用。加载配置文件时候不会创建对象,在获取对象(使用)才创建对象。
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。加载配置文件时候会把在配置文件中的对象创建。
- ApplicationContext主要实现类
3.IOC操作Bean管理(基于xml)
什么是Bean管理:
Spring创建对象、Spring注入属性
基于xml方式创建对象
<bean id="dao" class="com.atguigu.spring5.UserDao"></bean>
在spring配置文件种,使用bean标签,标签里面添加对应属性,就可以实现对象创建
- id属性 : 唯一标识
- class属性 : 类全路径(包全路径)
创建对象的时候,默认执行无参数构造方法
基于xml方式注入属性
DI:依赖注入,就是注入属性
第一种注入方式:使用set方法进行注入
创建类,定义属性和对应的set方法
在spring配置文件配置对象创建,配置属性注入
public class Book {
private String bname;
private String bauthor;
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
}
<!--set方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book">
<property name="bname" value="西游记"></property>
<property name="bauthor" value="罗贯中"></property>
</bean>
第一种注入方式:使用有参构造进行注入
创建类,定义属性,创建属性对应有参数构造方法
在spring配置文件种进行配置
public class Orders {
private String oname;
private String address;
public Orders(String oname, String address) {
this.oname = oname;
this.address = address;
}
}
<bean id="orders" class="com.atguigu.spring5.Orders">
<constructor-arg name="oname" value="电脑"></constructor-arg>
<constructor-arg name="address" value="China"></constructor-arg>
</bean>
xml注入其他类型属性:
字面量<