一,Spring简介

1.1是什么

Spring框架是开源的J2EE应用程序框架,
是针对bean的生命周期进行管理的轻量级容器,
以 IOC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,
还可以整合世界开源的第三方框架和类库

1.2优势

1)方便解耦,简化开发
通过 Spring 提供的 IoC容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度耦合。
2)方便集成各种优秀框架
Spring对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的支持
在每一层都有对应的解决方案

3)降低 JavaEE API 的使用难度
Spring对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

二,IOC(控制反转),DI(注入依赖)

对象创建的权利由Spring框架完成.由容器管理对象的生命周期.

1.原来的对象的创建都是由用户自己手动创建,这样的方式耦合性 肯定高. 如果类发生了变化,则代码都得修改.
2. 现在所有的对象都交给Spring容器管理. 用户无需关心对象是如何实例化. 容器负责对象的注入即可. 以后几乎不用修改任何代码. 降低了代码的耦合性

2.1 为何反转,如何理解依赖

2.1

2.1.1 编写Dao接口和实现类

public interface UserDao {public void save();
}
public class UserDaoImlp implements UserDao {@Overridepublic void save() {System.out.println("UserDao的save...");}
}

2.1.2 创建Spring核心配置文件 并配置UserDaoImpl

在类路径下(resources)创建spring.xml配置文件

<?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"><!--该配置文件作用是管理对象术语: bean  被spring容器管理的对象称之为bean属性说明:id: 是spring容器中对象的唯一标识符.不能重复class: 对象的全路径--><bean id="userDao" class="com.jt.demo.UserDaoImlp"></bean></beans>

2.1.3测试 使用Spring的API获得Bean实例

 @Testpublic void test2(){//创建spring容器. 并且加载指定的配置文件 对象已经交给容器管理ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");//从容器中获取对象UserDao userDao = (UserDao) context.getBean("userDao");//根据id,需类型转换UserDao userDao1 = context.getBean(UserDao.class);//根据类型userDao.save();userDao1.save();}

2.2.1,关于Spring容器

Spring容器的数据结构是Map集合,Map<key,value>
key=“user” value=“通过反射机制实例化的对象”

<bean id="user" class="com.jt.demo.User"></bean>

2.2.2 了解反射(怎么创建对象)

默认情况下,反射是通过无参构造创建对象的
反射机制在框架中使用较多,给定类型路径就可以获取其中的对象,但是必须要有无参构造,否则程序运行异常

 @Testpublic void test3() throws ClassNotFoundException, IllegalAccessException, InstantiationException {UserDaoImlp user= (UserDaoImlp) Class.forName("com.jt.demo.UserDaoImlp").newInstance();user.save();}

2.3 Spring注解开发

2.3.1说明

大约在2015年以前 框架的开发需要大量的xml配置文件。导致项目配置比较臃肿,开发效率略低. 但是项目整合时的 报错概率很高. Spring与时俱进 从3开始逐步演化为注解开发. 到了SpringBoot框架的诞生,标志着进入了全注解时代.

2.3.2注解开发步骤

1)编辑User类

package com.jt.demo;public class User {public void say(){System.out.println("使用全注解的方式管理对象");}
}

2)编辑配置类

说明: 原始的开发使用xxx.xml文件 用来管理对象, 现在都使用java类的形式当作配置文件则将该java类 称之为配置类.

package com.jt.config;import com.jt.demo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration //将当前类标识为配置类
public class SpringConfig {//xml/***  1.xml形式*      <bean id="user" class="com.jt.demo.User"></bean>*  2.注解形式*     Map集合的结构 Map<方法名,方法的返回值>*     @Bean 将方法的返回值,交给Spring容器管理.*/@Beanpublic User user(){return new User(); //相当于xml反射机制创建对象}
}

3)编辑测试类

package com.jt;import com.jt.config.SpringConfig;
import com.jt.demo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring {//利用注解的方式管理对象@Testpublic void testDemo1(){//1.利用注解的方式启动spring容器ApplicationContext context =new AnnotationConfigApplicationContext(SpringConfig.class);//2. 从容器中获取对象User user = context.getBean(User.class);//3. 对象调用方法user.say();}
}

三 依赖注入DI

public interface Pet {void hello();
}//实现类1
@Component
public class Dog implements Pet{@Overridepublic void hello() {System.out.println("小狗汪汪汪");}
}//实现类2
@Component
public class Cat implements Pet{@Overridepublic void hello() {System.out.println("小猫喵喵秒");}
}
@Component
public class User {@Autowired//根源解耦@Qualifier("dog")   //一个接口有两个实现类的话,需要指定
//    @Resource(name = "cat") //@Autowired+@Qualifier("cat"),不推荐用,javax拓展包private Pet pet;//类型是接口,找其实现类public void say(){pet.hello();}
}

Spring学习总结01--Spring了解,IOC,DI相关推荐

  1. JavaEE——Spring学习笔记01【Ioc开发的模式】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  2. Spring学习(1)之IoC和Di

    文章目录 1.Spring 1.1简介 1.2优点与缺点: 1.3组成: 1.4提前知识: 2.IoC的本质 2.1IoC创建对象的方式: 3.Spring中xml文件中的属性的配置 3.1别名 3. ...

  3. Spring框架零基础学习(一):IOC|DI、AOP

    文章目录 一.IDEA创建Spring项目 二.Spring: IOC和DI 三.Spring: AOP 参考链接: HOW2J.CN:Spring idea创建一个spring项目 一.IDEA创建 ...

  4. 【Spring学习】01

    Spring学习01 Spring概述 简介 优点 组成 Spring快速入门 Spring程序开发步骤 Spring概述 简介 ·Spring框架是由于软件开发的复杂性而创建的.Spring使用的是 ...

  5. spring学习笔记(spring概述和IOC)

    spring5 1.spring的概述 1.1.spring是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的. Spring 的 ...

  6. Spring学习总结(1)- IOC

    一.Spring框架概述 Spring是一个开源免费的框架,为了解决企业应用开发的复杂性而创建.Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用.Spring是模块化的,所以可以只使 ...

  7. Spring学习笔记 之 Spring<全>

    开始学习Spring全家桶 文章目录 1. IoC 定义 为什么叫控制反转? 实现 IoC 容器创建 bean 的两种⽅式 IoC DI 特殊字符的处理 Spring 中的bean创建类型 -- sc ...

  8. Spring 学习之 二----Spring创建对象的三种方式

    最近在系统的学习Spring,现在就Spring的一些知识进行总结. 我们知道Spring是一个开放源代码的设计层面的框架,他主要解决的是业务逻辑层与其他各层之间松耦合的问题. Spring 有三个核 ...

  9. [spring学习] 1、spring下载与使用

    目录 spring介绍 spring核心部分 spring的下载 idea使用spring 总结 spring介绍 Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Jo ...

  10. Spring学习9-MyEclipse中Spring工程使用@Resource注释的问题

    在MyEclipse 的Spring工程中,有时候要使用@Resource注释来驱动Spring配置.但是在MyEclipse添加Spring开发能力的操作中,并没有 把相关的库添加到工程的class ...

最新文章

  1. NSNotification先注册监听,再发送消息
  2. python3 rsa加密_【Python】Python3 实现 JS 中 RSA 加密的 NoPadding 模式
  3. 扩容是元素还是数组_Java中对数组的操作
  4. java线性数据结构_Java实现数据结构之线性结构
  5. 老板说,我请你来,不是叫你无脑拷贝的,竟然在线上搞出这么大的一个BUG......
  6. pdf转word乱码怎么办,可能是你没用对工具
  7. 【基于熵权-模糊综合评价法】《基于熵权-模糊综合评价法的施工项目风险评价研究》论文笔记(内附MATLAB代码)
  8. 在Maya和ZBrush中制作战士模型
  9. Qt开源作品41-网络调试助手增强版V2022
  10. 计算机专业的八字,生辰八字五行计算器
  11. IOS性能优化之一些常见的性能指标
  12. QT版用QLCDnumber显示时间
  13. 解决阿里云oss 图片跨域问题
  14. 短期不看好 KotLin 原因
  15. python判断身份证是否合法的函数_oracle中验证身份证是否合法的函数脚本
  16. element 验证出现英文以及自动验证问题
  17. C++中 #if #endif 和#ifdef #endif的用法
  18. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)
  19. 一个数据分析报告的框架,主要包含哪几项?
  20. MATLAB未找到支持的编译器或 sdk 解决方案

热门文章

  1. python 红黑树_手把手教你43行代码写红黑树(包括删除操作)
  2. python批量下载bilibili视频_python批量提取哔哩哔哩bilibili视频
  3. ICPCCamp 2016 Day 6 - Spb SU and Spb AU Contest(Colored path-dp)
  4. 树莓派PyQt5触摸屏软键盘调用实现
  5. 5G NR LDPC码(3)—— DL-SCH和UL-SCH的LDPC处理(含代码)
  6. AngularJs:Directive指令用法
  7. qlv转mp4绿色版工具
  8. 移动端获取手机自带的返回键并添加事件。
  9. 谁将是互联网宝宝军团的最大劲敌?
  10. 今日学习在线编程题:可怜的小码哥