1.Spring 概念
2.IOC容器
(1)IOC底层原理
(2)IOC接口(BeanFactory)
(3)IOC操作Bean管理(基于xml)
(4)IOC操作Bean管理(基于注解)
3.Aop
4.JdbcTemplate
5.事务管理
6.Spring5新特性
1、Spring是轻量级的开源的JavaEE框架
2、Spring可以解决企业应用开发的复杂性
3、Spring有两个核心部分:IOC和Aop
(1)IOC:控制反转,把创建对象过程交给Spring进行管理
(2)Aop:面向切面,不修改源代码进行功能增强
4、Spring特点
(1)方便解耦,简化开发
(2)Aop编程支持
(3)方便程序测试
(4)方便和其他框架进行整合
(5)方便进行事务操作
(6)降低API开发难度
(1)使用Spring最新稳定版本5.2.6
(2)下载地址
https://repo.spring.io/release/org/springframework/spring/
2、打开idea工具,创建普通Java工程
3、导入Spring5相关jar包
4、创建普通类,在这个类创建普通方法
public class User {
public void add() {
System.out.println("add......");
}
}
5、创建Spring配置文件,在配置文件配置创建的对象
(1)Spring配置文件使用xml格式
6、进行测试代码编写
package com.atguigu.spring5.testdemo;
import com.atguigu.spring5.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpring5 {
@Test
public void testAdd() {
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
// 2 获取配置创建的对象
User user = context.getBean("user", User.class);
System.out.println("user = " + user);
user.add();
}
}
IOC(概念和原理)
1、什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理
(2)使用IOC目的:为了耦合度降低
(3)做入门案例就是IOC实现
2、IOC底层原理
(1)xml解析、工厂模式、反射
3、画图讲解IOC底层原理
IOC(BeanFactory接口)
1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器实现两种方式:(两个接口)
(1)BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用
*加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用
*加载配置文件时候就会把在配置文件对象进行创建
3、ApplicationContext接口有实现类
IOC操作Bean管理(概念)
1、什么是Bean管理
(0)Bean管理指的是两个操作
(1)Spring创建对象
(2)Spirng注入属性
2、Bean管理操作有两种方式
(1)基于xml配置文件方式实现
(2)基于注解方式实现
IOC操作Bean管理(基于xml方式)
1、基于xml方式创建对象
(1)在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
(2)在bean标签有很多属性,介绍常用的属性
- id属性:唯一标识
- class属性:类全路径(包类路径)
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
2、基于xml方式注入属性
(1)DI:依赖注入,就是注入属性
3、第一种注入方式:使用set方法进行注入
(1)创建类,定义属性和对应的set方法
public class Book {
private String bname;
private String bauthor;
// set 方法注入
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
}
(2)在spring配置文件配置对象创建,配置属性注入
(2)在spring配置文件中进行配置
public class Orders {
private String oname;
private String address;
public Orders(String oname, String address) {
this.oname = oname;
this.address = address;
}
public void ordersTest() {
System.out.println(oname + "::" + address);
}
}
@Test
public void testOrders() {
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
// 2 获取配置创建的对象
Orders orders = context.getBean("orders", Orders.class);
System.out.println("orders = " + orders);
orders.ordersTest();
}
5、p名称空间注入(了解)
(1)使用p名称空间注入,可以简化基于xml配置方式第一步添加p名称空间在配置文件中
第二步进行属性注入,在bean标签里面进行操作
四、IOC操作Bean管理(xml注入其他类型属性) (一)直面量-null值
package com.atguigu.spring5;
public class Book {
private String bname;
private String bauthor;
private String address;
// set 方法注入
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
public void setAddress(String address) {
this.address = address;
}
public void testDemo() {
System.out.println(bname + "::" + bauthor + "::" + address);
}
}
@Test
public void testBook() {
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
// 2 获取配置创建的对象
Book book = context.getBean("book", Book.class);
System.out.println("book = " + book);
book.testDemo();
}
(二)直面量-属性值包含特殊符号
>]]>
(三)注入属性-外部bean
(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
(3)在spring配置文件中进行配置
package com.atguigu.spring5.service;
import com.atguigu.spring5.dao.UserDao;
import com.atguigu.spring5.dao.UserDaoImpl;
public class UserService {
// 创建UserDao类型属性,生成set方法
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add() {
System.out.println("service add.....");
userDao.update();
}
}
@Test
public void testAdd() {
// 1 加载spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean2.xml");
// 2 获取配置创建的对象
UserService userService = context.getBean("userService", UserService.class);
userService.add();
}
(四)注入属性-内部bean
(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门部门是一,员工是多
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示
package com.atguigu.spring5.bean;
// 员工类
public class Emp {
private String ename;
private String gender;
//员工属于某一个部门,使用对象形式表示
private Dept dept;
public void setDept(Dept dept) {
this.dept = dept;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setGender(String gender) {
this.gender = gender;
}
public void add() {
System.out.println(ename +"::" + gender + "::" + dept);
}
}
package com.atguigu.spring5.bean;
// 部门类
public class Dept {
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
@Override
public String toString() {
return "Dept{" +
"dname='" + dname + ''' +
'}';
}
}
@Test
public void testBean2() {
// 1 加载Spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean3.xml");
// 2 获取配置创建的对象
Emp emp = context.getBean("emp", Emp.class);
emp.add();
}
(五)注入属性-级联赋值
第一种写法
第二种写法
五、IOC操作Bean管理(xml注入集合属性)
1、注入数组类型属性
2、注入List集合类型属性
3、注入Map集合类型属性
(1)创建类,定义数组,list,map,set类型属性,生成对应set方法
package com.atguigu.spring5.collectiontype2;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Stu {
//1 数组类型的属性
private String[] courses;
//2 list集合类型属性
private List list;
//3 map集合类型属性
private Map maps;
// 4 set集合类型属性
private Set sets;
public void setSets(Set sets) {
this.sets = sets;
}
public void setList(List list) {
this.list = list;
}
public void setMaps(Map maps) {
this.maps = maps;
}
public void setCourses(String[] courses) {
this.courses = courses;
}
}
(2)在Spring配置文件进行配置
java课程 数据库课程
张三 小三 Mysql redis



