一、Spring框架概念
1、分层的编程思想--MVC
面向接口(抽象)编程,分层思想的建立,各层相互分离,各司其职。
MVC思想和语言无关
2、框架总体介绍
dao层
MyBatis、Hibernate、Spring Data jpa
bean管理
Spring
controller层
SpringMVC、Structs2
微服务
Dubbo、Spring Cloud
缓存
Redis
二、Spring IOC实例化Bean对象的三种方式
1、构造器方式注意
通过默认构造器创建,空构造必须存在,否则创建失败XML配置
//class中为包名+类名,id为获取Bean对象时的参数
使用
/*** * 1. 加载配置文件 * 2. 获取HelloService的Bean对象,通过id * 3.使用bean * */ ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); HelloService hello= (HelloService) context.getBean("helloService"); hello.hello();
2、静态工厂方式注意
要有该工厂类及工厂方法,且工厂方法为静态方法静态工厂定义
public class StaticFactory { public static PersonService getPersonService(){ return new PersonService("cc"); } }XML配置
实例化工厂可以传递参数吗
二、依赖注入
1、名词解释
Spring统一管理对象的创建过程,方便管控
1)、依赖
如果AB两个类,A创建对象需要B先创建,就称A依赖于B,二者存在依赖关系。
2)、注入
假设在A中需要使用B的对象时,从外界创建好传入进来而不是自己创建,这个过程就是注入。
import com.czb.dao.UserDao; public class UserService { private UserDao dao=new UserDao(); //userService 依赖于UserDao public void test() { dao.addUser(); } }
2、依赖注入的类型
1)、set注入xml配置
java类
public class UserService { private UserDao dao; /*set注入*/ public void setDao(UserDao dao) { System.out.println("调用UserService的setDao"); this.dao = dao; } public void test() { dao.addUser(); } public UserService() { } }注意
必须存在set方法,以及空构造
默认选择set注入
只要bean被注入就会发生,不管是否使用,不管在xml文件中位置,都会调用创建好对象并调用set
2)、构造器注入XML配置
java
public class AccountService { private UserDao userDao; //构造器 public AccountService(UserDao userDao) { this.userDao = userDao; } public void print(){ System.out.println("accountService"); userDao.addUser(); } }
3)、静态工厂注入(了解)
被注入对象的创建方式是静态工厂
4)、实例化工厂注入(了解)
被注入对象的创建方式是实例化工厂
3、循环依赖问题
1)、现象:
Bean通过构造器注入,彼此之间存在依赖循环,导致无法实例化
2)、选择
首选set方式,使用set方式注入可以有明确的名称,可以了解被注入的对象是什么
构造器方式注入建立依赖关系容易造成循环依赖,而且关系复杂是互相之间会有影响,在构建函数的时候会有一连串的参数,也不太容易记忆
3)、Spring标签简化配置
p标签
//引入 xmlns:p="http://www.springframework.org/schema/p" //使用
c标签
//引入 xmlns:c="http://www.springframework.org/schema/c" //使用
4、集合注入(了解)
河南烩面
南方臊子面
油泼面
方便面