21-05-07---spring---学习记录(spirng概述,di注入)

本文介绍了Spring框架的核心特性——控制反转(IOC)和依赖注入(DI),详细阐述了DI通过反射机制实现对象创建的过程。文中通过一个简单的Spring配置文件示例,展示了如何声明bean并设置属性值。同时,讲解了DI的两种主要语法形式:set注入和构造注入,以及它们在实际应用中的使用。最后,提供了完整的代码示例,帮助读者理解Spring如何在Java应用中管理对象。

21-05-07

spring概述

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)

ioc的技术实现

DI是ioc的技术实现
DI :依赖注入,只需要在程序中提供要使用的对象名称就可以,至于对象如何在容器中创建,赋值,查找都由容器内部实现。

spring是使用的di实现了ioc的功能,spring底层创建对象,使用的是反射机制

反射机制

Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。
可以使用 Constructor 创建新的对象,用 get() 和 set() 方法读取和修改与 Field 对象关联的字段,用 invoke() 方法调用与 Method 对象关联的方法。另外,还可以调用 getFields() getMethods() 和 getConstructors() 等很便利的方法,以返回表示字段,方法,以及构造器的对象的数组。这样匿名对象的信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。
通过反射机制创建对象,在创建对象之前要获得对象的构造函数对象,通过构造函数对象创建对应类的实例

Spring的配置文件

1.beans:是根标签,spring把java对象称为bean
2.spring-beans.xsd 是约束文件,和mybatis指定的dtd是一样的。

告诉spring创建对象

声明bean,就是告诉spring要创建某个类的对象
id:对象的自定义名称,唯一值 spring通过该这个名称找到对象
class:类的全限定名称(不是接口,因为spring是反射机制常见对象,必须使用类)

一个bean标签声明一个对象

Spring默认创建对象的时间:在创建Spring容器时,会创建配置文件中的所有的对象
Spring创建对象:默认调用的时无参的构造方法

实现spring创建对象的步骤

1.创建maven项目
2.加入maven的依赖

<!--加入spring依赖-->

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.6.RELEASE</version>
      </dependency>

3.创建类

package com.node.ba01;

public class Student {

    private String name;
    private int age;

    public Student(){

    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.创建spring需要使用的配置文件
声明类的信息,这些类由spring创建和管理

applicationContext.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 id="myStudent" class="com.node.ba01.Student">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
    </bean>

</beans>

5.测试

package com.node;

import com.node.ba01.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    @Test
    public void test02(){
    	//使用spring容器创建对象
        //指定spring配置文件的名称
        String config="ba01/applicationContext.xml";
		//创建表示spring容器的对象,ApplicationContext
		//ApplicationContext就是表示spring容器,通过容器获取对象了
		//ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件
        ApplicationContext ac=new ClassPathXmlApplicationContext(config);
		//从容器中获取某个对象
		//getBean("配置文件中的bean的id值")
        Student student= (Student) ac.getBean("myStudent");
        System.out.println("Student对象"+student);

    }
}

DI的语法分类

1.set注入(设值注入):spring调用类的set方法,在set方法可以事项属性的赋值 (大多数用)
2.构造注入,spring调用类的有参构造方法,创建对象,在构造方法中完成赋值。

set注入

简单类型:spring中规定java的基本数据类型和String都时简单类型
1.简单类型的set注入

<bean id="myStudent" class="com.node.ba01.Student">
        <property name="属性名字" value="此属性的值"/>
        <property name="age" value="20"/>
        一个property只能给一个属性赋值
    </bean>

2.引用类型的set注入:spring调用类的set方法

<bean id="myStudent" class="com.node.ba02.Student">
        
        <!--引用类型-->
        <property name="属性名字" ref="bean的id(对象的名称)"/>
        <property name="school" ref="mySchool"/>

    </bean>

例:

 <bean id="myStudent" class="com.node.ba02.Student">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
        <!--引用类型-->
        <property name="school" ref="mySchool"/>

    </bean>

    <!--声明School对象-->
    <bean id="mySchool" class="com.node.ba02.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京海淀区"/>
    </bean>

构造注入

spring调用类的有参构造方法,在创建对象的同时,在构造方法中给属性赋值。
构造注入使用 标签
标签:
一个表示构造方法的一个参数
标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置时0,1,2的顺序
value:构造方法的形参类型时简单类型的,使用value
ref:构造方法的形参类型时引用类型的,使用ref

<?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">

    <!--使用name属性构造注入-->
    <bean id="myStudent" class="com.node.ba03.Student">
        <constructor-arg name="myname" value="张三"/>
        <constructor-arg name="myage" value="20"/>
        <constructor-arg name="myschool" ref="myXuexiao"/>
    </bean>

    <!--使用index方式构造注入-->
    <!--index 可省略,但顺序要按有参构造中的顺序-->
    <bean id="myStudent2" class="com.node.ba03.Student">
        <constructor-arg index="0" value="赵四"/>
        <constructor-arg index="1" value="29"/>
        <constructor-arg index="2" ref="myXuexiao"/>
    </bean>

    <!--声明School对象-->
    <bean id="myXuexiao" class="com.node.ba03.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京海淀区"/>
    </bean>

</beans>
本指南详细阐述基于Python编程语言结合OpenCV计算机视觉库构建实时眼部状态分析系统的技术流程。该系统能够准确识别眼部区域,并对眨眼动作与持续闭眼状态进行判别。OpenCV作为功能强大的图像处理工具库,配合Python简洁的语法特性与丰富的第三方模块支持,为开发此类视觉应用提供了理想环境。 在环境配置阶段,除基础Python运行环境外,还需安装OpenCV核心模块与dlib机器学习库。dlib库内置的HOG(方向梯度直方图)特征检测算法在面部特征定位方面表现卓越。 技术实现包含以下关键环节: - 面部区域检测:采用预训练的Haar级联分类器或HOG特征检测器完成初始人脸定位,为后续眼部分析建立基础坐标系 - 眼部精确定位:基于已识别的人脸区域,运用dlib提供的面部特征点预测模型准确标定双眼位置坐标 - 眼睑轮廓分析:通过OpenCV的轮廓提取算法精确勾勒眼睑边缘形态,为状态判别提供几何特征依据 - 眨眼动作识别:通过连续帧序列分析眼睑开合度变化,建立动态阈值模型判断瞬时闭合动作 - 持续闭眼检测:设定更严格的状态持续时间与闭合程度双重标准,准确识别长时间闭眼行为 - 实时处理架构:构建视频流处理管线,通过帧捕获、特征分析、状态判断的循环流程实现实时监控 完整的技术文档应包含模块化代码实现、依赖库安装指引、参数调优指南及常见问题解决方案。示例代码需具备完整的错误处理机制与性能优化建议,涵盖图像预处理、光照补偿等实际应用中的关键技术点。 掌握该技术体系不仅有助于深入理解计算机视觉原理,更为疲劳驾驶预警、医疗监护等实际应用场景提供了可靠的技术基础。后续优化方向可包括多模态特征融合、深度学习模型集成等进阶研究领域。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值