当前位置: 首页 > article >正文

【Spring】深入理解控制反转-IOC

目录

一、Spring_ioc_01项目

1. jdbc.properties

2. 高耦合

3. 中耦合

4. 低耦合

二、Spring_ioc_02项目

1. xxx.properties(键值对存储)

2. 解耦的方式创建对象

3. 调用getBean()方法并传入xxx.properties对应键获取其相应的值

三、Spring_ioc_03项目

1. spring两大思想:

1.1 IOC控制反转 、DI依赖注入

1.2 AOP面向切面编程

2. spring环境搭建

4. SpringIOC的理解

四、Spring_ioc04

1. SpringDI(依赖注入)

2. DI实现方式

2.1 set注入  

2.2 构造注入

2.3 注解注入

3. DI数据类型

4. DI使用步骤

五、Spring_ioc_05_bean

1. SpringIOC容器对Bean管理

2. bean作用域

3. bean生命周期

六、Spring_ioc_06_ann

1. spring的配置

2. spring2.5后=xml+annotation

3. 注解

3.1 注入类

3.2 注入基本数据

3.3 其他注解

七、Spring_ioc_07_javaConfig

1. 3.0配置类语法:

八、模块Module:项目同级显示


        在软件开发中,控制层(Controller)、业务逻辑层(Service)、数据访问层(DAO)三层架构是一种广泛采用的设计模式。

        

一、Spring_ioc_01项目

1. jdbc.properties

2. 高耦合

3. 中耦合

4. 低耦合

二、Spring_ioc_02项目

1. xxx.properties(键值对存储)

2. 解耦的方式创建对象

new Properties()创建了一个Properties对象。Properties类继承自Hashtable<Object,Object>,用于处理键值对形式的属性文件(如.properties文件),其中键和值都是字符串类型。

Test01.class.getClassLoader()获取了当前类(Test01)的类加载器,然后调用getResourceAsStream方法加载位于类路径(classpath)下的xxx.properties文件。之后,通过properties.load(inputStream)将文件内容加载到Properties对象中。

properties.getProperty(key)方法,根据传入的key(字符串)从Properties对象中获取对应的值(即类名)。

newInstance()方法创建这个类的一个新实例(new 对象)。

3. 调用getBean()方法并传入xxx.properties对应键获取其相应的值

三、Spring_ioc_03项目

1. spring两大思想
1.1 IOC控制反转 、DI依赖注入

                1)IOC容器:

                        springIOC搭建spring容器管理程序中的各个组件(class类)让程序可以实现高内聚,低耦合的编程。

                2)SpringIOC(控制反转):解耦

                3)硬编码实现解耦:

                        (1)不要直接new对象,通过反射创建

                        (2)将需要创建的对象独立保存在资源文件中,动态加载

1.2 AOP面向切面编程
2. spring环境搭建

        2.1.坐标 pom.xml

        2.2.配置文件 beans.xml

​​​​​​​

3. springIOC

        3.1.找到需要以解耦方式获取实例对象的类

        3.2.将需要spring管理的类注入spring容器(beans.xml

                <bean id="唯一标识" class="类"></bean>

                3.3.向spring容器中索取java实例(解耦)

                (1)相对路径加载spring核心配置文件,获取spring容器对象

                (2)获取对象

4. SpringIOC的理解

        ● IOC名词解释,作用是解耦,使用IOC容器管理项目组件之间的耦合关系

        ● IOC( Inversion of Control,中文释义:控制反转  ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;

        ○ 控制 :指的是对象创建(实例化、管理)的权力

        ○ 反转 :控制权交给外部环境(Spring框架、IoC容器)

        关键字

                BeanFactory(父)

                ApplicationContext(子)

                ClassPathXmlApplicationContext:通过加载主配置文件的相对路径,获取spring容器

                FileSystemXmlApplicationContext:通过加载主配置文件的绝对路径,获取spring容器

                AnnotationConfigApplicationContext:加载配置类,获取spring容器

四、Spring_ioc04

1. SpringDI(依赖注入)

        作用:将springioc容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)

2. DI实现方式
2.1 set注入  

                语法:<property name value ref(引用)>

  JavaBean(注入对象)

     (1)set方法

     (2)set配置(applicationContext.xml)

   基本数据类型与String:

     (1)set方法

     (2)set设置

  复杂数据类型

     (1)set方法

     (2)set设置

2.2 构造注入

        语法:<constructor-arg name type index value ref>

 基本类型与String

     (1)构造方法   (无参构造方法不能忘

     (2)构造配置

JavaBean

     (1)构造方法

     (2)构造配置

2.3 注解注入

3. DI数据类型

(1)基本类型与String

(2)JavaBean

(3)复杂类型,list set array map properties(构造注入不支持

4. DI使用步骤

    1.思考,什么方式,什么数据类型

    2.给属性提供set(构造)方法

    3.编写配置文件

五、Spring_ioc_05_bean

1. SpringIOC容器对Bean管理

  1)bean实例化

(1)通过构造方法(默认)

(2)通过工厂方法

(3)通过静态工厂方法

2. bean作用域

含义:spring对于创建javaBean实例的方式

语法:<bean scope="属性值"></bean>

属性值:

     singleton=====>单例(默认)

     prototype=====>多例

     request=======>一个请求创建一个

     session=======>一个会话创建一个

3. bean生命周期

  1)实例化 ===> 构造方法、工厂

  2)属性赋值(DI) ===> set、构造

  3)初始化

       (1)接口   InitializingBean ===> afterPropertiesSet()方法

       (2)属性   init-method=""

  4)操作使用

  5)销毁了

       容器关闭执行销毁(classPathXmlApplicationContext.close())

       (1)接口   DisposableBean ===> destroy()方法

       (2)属性   destory-method=""

六、Spring_ioc_06_ann

1. spring的配置
  1. spring2.5前==xml
  2. spring2.5后==xml+annotation
  3. spring3.0后==annotation+JavaConfig配置类

2. spring2.5后=xml+annotation

目的优化一下代码:

    <bean id="" class="" init-method="" destroy-method="" scope="" autowire="">

           <property></property>

           <constructor-arg></constructor-arg>

      </bean>

3. 注解
3.1 注入类

     (1)替换:<bean id="" class=""></bean>

     (2)位置:类

     (3)语法: @Component

           eg:Class User{}

               <bean id="user" class="com.apesource.包.User"></bean>

||等价于||

                @Component

                Class User{}

           @Component(value="注入容器中的id,如果省略id为类名且首字母小写,value属性名称可以省略")

     (4)配置:

         <context:component-scan base-package=""></context:component-scan>功能一致

     (5)含义:扫描所有被@Component注解所修饰的类,注入容器

     (6)@Repository=====>注入数据访问层

          @Service========>注入业务层

          @Controller=====>注入控制层

          以上三个注解与@Component功能语法一致

3.2 注入基本数据

     (1)@Value

           含义:注入基本数据

           替换:<property></property>

           修饰:成员变量或对应的set方法

           语法:@Value("数据内容")

           @Value("${动态获取}")===>el表达式

             <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

     (2)@Autowired

          语法:

                @Autowired(required = "true-默认、false、是否必须进行装配")

                @Autowired(required = true)===>找不到对应类型会报错

                @Autowired(required = false)===>找不到不进行装配,且不会报错

          修饰:成员变量或对应的构造方法

          含义:按照通过set方法进行“类型装配”,set方法可以省略

          注意

                默认是按照类型装配且同set方法。

            若容器中有一个类型可以与之匹配则装配成功,若没有一个类型可以匹配则报错。(NoSuchBeanDefinitionException)

               若容器中有多个类型可以与之匹配,则自动切换为按照名称装配,若名称没有对应,则报错(NoUniqueBeanDefinitionException)

3.3 其他注解

     (1)@Primary

          含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)

          修饰:类

          注意:不能单独使用,必须与@Component....联合使用

      (2)@Qualifier(value="名称(类第一个字母小写)")

          含义:按照名称装配

          修饰:成员变量

          注意:不能单独使用,必须与@Autowired联合使用

      (3)@Resource(name="名称(类第一个字母小写)")

          含义:按照名称装配

          修饰:成员变量

          注意:单独使用

      (4)@Scope

          含义:配置类的作用域

          修饰:类

          注意:不能单独使用,必须与@Component....联合使用

                @Scope("prototype")

                @Scope("singleton")

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

                @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)

      (5)@PostConstruct:初始化,修饰方法

          替换:init-method

      (6)@PreDestroy:销毁,修饰方法

          替换:destory-method

七、Spring_ioc_07_javaConfig

1. 3.0配置类语法:

  spring中的新注解

    (1)@Configuration

      作用:指定当前类是一个配置类

      细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。

    (2)@ComponentScan

      作用:用于通过注解指定spring在创建容器时要扫描的包

      属性:value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。

      替换:

    (3)@PropertySource

        作用:用于指定properties文件的位置

        属性:value:指定文件的名称和路径。

        配合@Value使用

        替换:

     (4)@Bean

         作用:用于把当前方法的返回值作为bean对象存入spring的容器中

         属性:name:用于指定bean的id。当不写时,默认值是当前方法的名称

    (5)@Import

         作用:用于导入其他的配置类

         属性:value:用于指定其他配置类的字节码。

         例子:@Import(SystemSpringConfig.class)

八、模块Module:项目同级显示

parent:父项目

Grouid:与项目中java路径一致


http://www.kler.cn/a/329148.html

相关文章:

  • 【支持向量机(SVM)】:算法原理及核函数
  • More Effective C++ Item 7:区别使用()和{}创建对象
  • 如何将几个音频合成一个音频?非常简单的几种合成方法
  • Java——多线程
  • 【Pythonr入门第二讲】你好,世界
  • Android CPU核分配关联进程
  • Linux网络操作命令与函数全面总结
  • 机器视觉工程师一直做调试,维护岗位,想转岗软件方面C#从零开始,快则三年不到,慢则一辈子不会
  • YOLO11改进 | 检测头 | 小目标遮挡物性能提升的检测头Detect_MultiSEAM【完整代码】
  • 好玩的水表电表
  • we3.0里的钱包是什么?
  • Linux——pod的控制器
  • AR 眼镜之-蓝牙电话-来电铃声与系统音效
  • PO2GO、PO2Vec论文阅读与模型复现报告
  • 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】
  • 【环保背景高管1009】2022顶刊论文数据,环保背景高管对投资的影响探究
  • 初识算法 · 双指针(1)
  • LeetCode 面试经典150题 69.x的平方根
  • html嵌入百度地图
  • 酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构
  • 如何解决 Photoshop 中的“暂存盘已满”错误
  • 用于高频交易预测的最优输出LSTM
  • 【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型
  • Python 并发新境界:探索 `multiprocessing` 模块的无限可能
  • 828华为云征文|部署敏捷项目管理系统工具 ZenTao
  • Spring Boot 基础入门指南