Spring(大容器 大总管———偏向于管理的)
管理的是对象
1.创建 IOC控制反转 原生(每次一个新的) 单例
2.注入 DI依赖注入
3.AOP 哪些目标对象 哪些不是目标对象(切面对象) 代理
动态代理+责任链模式
MVC分层
(JQ VUE) V:View JSP HTML+AJAX+JSON
SpringMVC C:Controller Filter—-Servlet
(请求/响应)
M:Model Service Java业务逻辑
MyBatis DAO Java数据持久化 读/写JDBC
(ORM)
=======================================================================
1.下载 spring.io GitHub
2.简单了解一下Spring下载以后的样子
找到 核心的jar包(21个) 核心手册index.html
3.上来就用
将jar导入项目中
进行对象的管理 对象-Bean JavaBean
4.创建一个核心文件
我愿意叫ApplicationContext.xml
内容参考手册
5.获取一个BeanFactory对象
new ClassPathXmlApplicationContext(“文件”)
对象 = factory.getBean(“id”);
6.从底层机制来讲
每一个bean默认的效果是单一的(单例模式)
立即加载?ok 延迟加载?
就不想要单例的? 通过
如果是单例 延迟?
7.如果在未来会有很多层次的很多对象需要管理
如下几种方式来分开(增强可读性)
将不同的bean标签 放置在不同的配置文件中
ApplicationContextDao.xml
ApplicationContext_Service.xml
ApplicationContext_Controller.xml
方式一:
new ClassPathXmlApplicationContext(“”,””,””);
方式二:
new ClassPathXmlApplicationContext(new String[]{“”,””,””});
方式三:
new ClassPathXmlApplicationContext(“ApplicationContext*.xml”);
方式四:
new ClassPathXmlApplicationContext(“ApplicationContext.xml”);
在核心配置文件中引入其他文件
===================================================================
梳理一下Spring框架的基本用法
1.导包 core beans context expression
commons-logging aop tx
2.核心配置文件
ApplicationContext.xml
管理所有的bean对象
规则——>专业的手册
3.创建一个BeanFactory对象
ClassPathXmlApplicationContext(“xml”)
(造型)getBean(“id”);
4.配置文件的问题
将不同的bean对象分开在不同的配置文件中写
ApplicationContextDao.xml
ApplicationContext_Service.xml
ClassPathXmlApplicationContext(“”,””,””)
ClassPathXmlApplicationContext(new String[]{“”,””,””})
ClassPathXmlApplicationContext(“ApplicationContext*.xml”);
5.可以利用配置文件的标签
给我们需要的对象做赋值 DI依赖注入
利用属性对应的set方法进行赋值
利用带参数的构造方法给属性赋值
6.接着昨天的代码之后来研究
对象中存在其他对象这样的形式
手动:我们需要自己去配置bean 属性 关系
7.如果Spring可以帮我们自动的将对象装配进去
DI
读取配置文件 (解析信息 class id)—-String
反射
根据class创建类
根据类创建对象——默认立即加载 单例模式
Map
根据配置文件中的关系反射分析每一个对象的属性
给属性做赋值操作
反射能获取到属性(类型 名字)
通过属性类型——>刚才那个Map中有没有一个对象 一致的?
通过属性名字——>刚才那个Map中有没有一个对象
8.基于以上那些知识
可以利用Spring帮我们管理对象
所有的对象交给Spring管理都是
可以利用自动装配的形式让Spring帮我们做对象之间的关系注入
手动:自己写配置文件的关系
自动:利用
我们写了一个配置
底层:
读取配置文件 两个bean里面的所有信息 id class byType
Class clazz = Class.forName(“controller”);
Object controller = clazz.newInstance();//空参数的构造方法 new Controller();
map.put(“controller”,controller);
再来一次 将service放入
map.put(“service”,service);
分析Controller类中的属性
Filed[] fields = clazz.getDeclaredFields();
循环每一次得到一个属性
Class filedType = field.getType();// Service
String fieldName = field.getName();// service
Object service = map.get(fieldName);//byName
//set方法 构造方法
fieldName首字母变大写 前面拼接set——>setService
Method method = clazz.getMethod(“setService”);
method.invoke(service);
=================================================================
综上
可以利用Spring管理对象啦
对象可以手动、自动的方式进行DI装配
对象是[数组/集合] 不多见 录播课一节课详细讲啦
分析基于注解的配置形式
将原来xml中的信息放在注解里 导包
注解需要放置在 交给Spring管理对象的类上面
@Component(“”) 组件
如果注解中不写”id” 默认—>类名字的驼峰式studentController
@Controller
@Service
@Repository
接下来看Spring录播课
次重点:SpEL
重点:AOP
重点:Annotation后2节