首页 > 其他分享 >1.Spring、IOC与依赖注入

1.Spring、IOC与依赖注入

时间:2022-09-28 10:04:11浏览次数:75  
标签:依赖 创建 对象 Spring AOP bean spring IOC


  1. Spring概述

Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

1.Spring、IOC与依赖注入_xml

通过Spring提供的IoC容器(本质就是一个map,key是字符串,值是对象),可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

AOP编程的支持

通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

  1. IOC的概念

划分模块的一个准则就是高内聚低耦合。

程序间的依赖关系。

独立性很差,可重用度不高。

2.1工厂式解耦

1.Spring、IOC与依赖注入_xml_02

1.Spring、IOC与依赖注入_解耦_03

1.Spring、IOC与依赖注入_解耦_04

以上这种方式创建对象会产生耦合,在开发过程中,减少使用这种开发模式。

第一步:先把创建的xml反射替代出来new对象,用反射去创建,然后把发射对象剥离到一个配置文件中。

第二步:然后去用BeanFactory去控制这个文件配置。

到了第二步,这种方式就是工厂式解耦。

1.Spring、IOC与依赖注入_解耦_05

由原来的主动索要资源,到现在的被动的给资源。工厂生产什么,它就接收什么,在这个过程中有可能会产生不能匹配的文件。

当然在创建的工厂IOC容器中有两个读取配置的两个对象:一个是Properties另一个是ResourceBundle

ResourceBundle.getBudle(); a.这个对象只能取值不能赋值;

b.只能读取properties配置文件(是因为没有添加扩展名的机会),所以别的不行。

C. 它只能读取类路径下的properties文件,别的地方不行。

但是它还有一个细节就是如下全限定类名和绝对路径的区别

1.Spring、IOC与依赖注入_xml_06

工厂式解耦原理:

1.Spring、IOC与依赖注入_解耦_07

1.Spring、IOC与依赖注入_xml_08

1.Spring、IOC与依赖注入_解耦_09

2.2控制反转-Inversion of Control

它的主要目的就是解耦。

在service中不可能有可变的方法??

想创建一个对象,只有把工厂对象放外边,放里边会产生多个对象。以下就是spring中ioc的原理:

1.Spring、IOC与依赖注入_解耦_10

  1. 使用spring的ioc

注意:准备spring的jar包(5以上就行)

导入约束xmlns

1.Spring、IOC与依赖注入_xml_11

1.Spring、IOC与依赖注入_解耦_12

1.Spring、IOC与依赖注入_xml_13

左图就是用到spring IOC的话,需要配置的三个文件。

  1. spring的分析

以下是获取的容器中对象的方法:

1.Spring、IOC与依赖注入_spring_14

 

1.Spring、IOC与依赖注入_解耦_15

BeanFactory和ApplicationContext的区别:

1.Spring、IOC与依赖注入_spring_16

Spring 中bean对象的细节--以下是关于bean.xml中的分析:

  1. 创建bean对象的三种方式:
  2. 1.Spring、IOC与依赖注入_spring_17

 

  1.  Bean对象作用范围改变

1.Spring、IOC与依赖注入_解耦_18

  1. Bean对象得生命周期

1.Spring、IOC与依赖注入_spring_19

1.Spring、IOC与依赖注入_xml_20

  1. 配置对象:把对象的创建交给spring来管理:依赖注入

什么是依赖注入?就是把当前所需要的对象传进来就是依赖注入。

1.Spring、IOC与依赖注入_spring_21

1.Spring、IOC与依赖注入_spring_22

如下代码所示:

1.Spring、IOC与依赖注入_spring_22

1.Spring、IOC与依赖注入_解耦_24

复杂类型注入

 

1.Spring、IOC与依赖注入_解耦_25

1.Spring、IOC与依赖注入_解耦_26

补充:

@Service是一个注解啊,告诉spring创建一个实现类的实例啊。。。
就是不用再spring里配置bean,就是因为这个@Service

@Repository用于标注数据访问组件,即DAO组件;

在一个稍大的项目中,如果组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 

 

标签:依赖,创建,对象,Spring,AOP,bean,spring,IOC
From: https://blog.51cto.com/u_15765446/5718390

相关文章

  • springboot+websocket
    springboot+websocket:先引入websocket的依赖包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-we......
  • 记一次使用spring javaconfig踩到的坑
    前言为了简化开发,我部门经常会封装一些通用的类库给业务研发使用,因为业务方的根包路径很经常和我们部门项目的根包是不一样的,因此我们会让业务方在使用我们封装的包时,扫描......
  • SpringBoot整合MyBatis
    配置准备引入依赖在pom.xml文件中引入数据库和mybatis相关依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-j......
  • SpringBoot 常用读取配置文件的 3 种方法!
    我们在SpringBoot框架进行项目开发中该如何优雅的读取配置呢?或者说对于一些List或者Map应该如何配置呢?本篇主要解决如下几个问题:1、SpringBoot有哪些常用的读取配置文件......
  • springboot 整合Ehcache的使用
    Springboot提供了换粗的统一整合接口,方便缓存技术的开发与管理。Generic,JCache,Ehcache,Hazelcast,Infinispan,Couchbase,Redis,Caffenine,Simple(默认缓存),Memcached。如何整合......
  • spring
    Spring依赖源码下载地址https://repo.spring.io/ui/native/release/org/springframework/spring所需依赖导入spring所需的外部依赖创建spring.xml配置文件........
  • spring boot实现动态增删启停定时任务
    在springboot项目中,可以通过@EnableScheduling注解和@Scheduled注解实现定时任务,也可以通过SchedulingConfigurer接口来实现定时任务。但是这两种方式不能动态添加、删除......
  • Spring的DI方式
    Spring常见的DI方式构造器注入 :利用构造方法的参数注入依赖Setter注入 :调用Setter的方法注入依赖字段注入 :在字段上使用@Autowired/Resource注解@AutowiredVS@R......
  • @SpringBootApplication注解
    @SpringBootApplication是一个组合注解,它组合了三个其他的注解:@SpringBootConfiguration:将该类声明为配置类。尽管这个类目前还没有太多的配置,但是我们后续可以按照需求......
  • SpringBoot(概述、起步依赖原理分析、SpringBoot配置(配置文件分类、YAML))
    SpringBoot概述SpringBoot是由Pivotal团队提供用来简化Spring的搭建和开发过程的全新框架。随着近些年来微服务技术的流行,SpringBoot也成了时下炙手可热的热点技......