1、Spring概念介绍
什么是Spring
Spring是开源的、轻量级的、企业级的应用集合框架,是包含众多工具方法的IOC容器
2、IOC与DI概念
什么是责任链
使用MVC开发的时候数据在各层之间传递,在业务上形成一个链条
基于责任链模式开发的缺点
当最底层的类被修改时,那么整个调用链的所有类都需要被修改。造成耦合度比较高。
什么是IOC
IOC就是控制反转,处理对象的创建 控制:对类实例化的控制,也就是创建对象这件事 反转:原本由程序员创建实例,现在由Spring进行实例化
什么是DI
DI就是依赖注入,处理属性的赋值 依赖:一个类在另一个类中作为全局属性时 注入:通过Spring容器为自己的属性注册一个值
3、IOC实现原理
IOC实现原理
1.XML解析技术读取配置文件
<bean id="u1" class="com.mdh.demo.User"></bean>
将上面的信息读入程序,一个是对象的id,一个是对象的类的全路径名
2.反射技术实例化对象,放到容器中
(1)首先获得类的字节码
Class clazz = Class.forName("com.mdh.demo.User");
(2)然后通过字节码实例化对象
Object obj = clazz.newInstance();
(3)最后将对象放到一个类似map的集合中
map.put("u1",obj);
3.工厂模式返回Bean对象
public Object getBean(String name){
Object obj = map.get(name);
return obj;
}
BeanFactory与ApplicationContext接口
BeanFactroy:Bean工厂 ApplicationContext:应用上下文
1.ApplicationContext是BeanFactroy的子类,提供了更多面向实际应用的功能,例如:对国际化的支持,支持资源的访问,支持时间的传播
2.BeanFactory采用延迟加载Bean,在第一次使用getBean方法获取Bean实例时才加载Bean;而ApplicationContext在自身被实例化时一次完成所有Bean创建
3.ApplicationContext类体系结构中,主要的实现类有两个 (1)ClassPathXmlApplicationContext从类路径加载配置文件 (2)FileSystemXmlApplicationContext从文件系统中加载配置文件(如c盘)
使用Spring
1.创建Maven项目,导入依赖包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
2.创建业务对象
3.在resource下配置xml
4.创建启动类或测试类进行使用
public class App {
public static void main(String[] args) {
//1.1获取到Spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//1.2获取到Spring的上下文对象
//BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
//BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
//2.1从Spring(上下文)中获取到业务对象,通过bean的id
//UserBean user = (UserBean) context.getBean("user");
//2.2从Spring(上下文)中获取到业务对象,通过对象类型
//UserBean user = context.getBean(UserBean.class);
//2.3从Spring(上下文)中获取到业务对象,通过id+对象类型
User user = context.getBean("user1",User.class);
//3.使用业务对象
System.out.println(user);
}
}
评论( 0 )