首页 > 其他分享 >Spring学习笔记

Spring学习笔记

时间:2022-08-27 21:52:11浏览次数:49  
标签:容器 ac ApplicationContext 对象 Spring 笔记 学习 spring

Spring学习

1.概述

​ Spring 是一个轻量级的 Java 开发框架,它是为了解决企业开发的复杂性而创建的,可以帮助开发人员创建对象管理对象之间的关系。

​ Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。 可以实现模块之间、类之间的解耦合。

​ Spring是一个容器,容器中存放的是java对象,可以存放service,dao,工具类等,程序员需要做的是把对象放入到容器中。

2.控制反转

IOC (Inversion of control):

控制:把对象的创建、赋值、管理工作都交给容器来实现。

反转:容器代替开发人员创建赋值管理对象

底层使用的是反射机制

使用目的:解耦合,减少对代码的改动,实现功能。

3.举个栗子

配置文件

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

    <!--
    告诉spring创建对象
    声明bean,就是告诉spring创建某个类的对象
    id:对象的自定义名称,唯一值,spring通过这个名称找到对象
    class:类的全限定名称,不能是接口,因为spring是反射机制创建对象
    一个bean标签声明一个对象
    -->
    <bean id="someService" class="com.bjpowernode.service.impl.SomeServiceImpl"/>
</beans>
<!--
       spring的配置文件
       1.beans:是跟标签,spring把java对象称为bean
       2.spring-beans.xsd是约束文件
-->

测试类

    @Test
    public void test02() {
        //使用spring容器创建对象
        //1.指定spring配置文件的名称
        String config = "beans.xml";

        /**
         *   2.创建spring容器的对象,ApplicationContext
         *   ApplicationContext就是表示spring容器,通过容器获取对象
         *   ClassPathXmlApplicationContext是ApplicationContext的实现类 表示从类路径中加载配置文件
         */
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);

         // 从容器中获取某个对象
        // getBean("配置文件中的bean的id值")
        SomeService service = (SomeService) ac.getBean("someService");
        // 调用该对象的方法
        service.domeSome();
    }

Spring创建对象的时间是在创建spring’容器的时候,会创建spring容器中的所有对象。

Spring提供的方法

    @Test
    public void test03(){
        String config = "beans.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);
        //Spring提供的方法,获取容器中定义的对象的数量
        int cout = ac.getBeanDefinitionCount();
        System.out.println(cout);
        //Spring提供的方法,获取容器中对象的名字
        String[] names = ac.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
    }

Spring能创建一个非自定义的对象(Java提供的对象)

   // 获取一个非自定义类的对象  比如Date类
   @Test
   public void test04(){
       String config = "beans.xml";
       ApplicationContext ac = new ClassPathXmlApplicationContext(config);
       Date myDate = (Date) ac.getBean("myDate");
       System.out.println(myDate);

   }

4.依赖注入

DI(dependency Injection)是ioc技术的实现,叫做依赖注入,只需在程序中提供使用对象的名称就可以创建对象给属性赋值。

注入:就是赋值的意思

DI的实现

1.在Spring的配置文件中,使用标签和属性完成叫做基于xml的DI实现

2.使用spring中的注解,完成属性赋值,叫做基于注解的di实现。

DI的语法分类

1.set注入(设值注入)

spring调用类的set方法,在set方法中实现属性的赋值

    简单类型:spring中规定java的基本数据类型和string都是简单类型
    
	1.简单类型的set注入
 
    <bean id="student" class="com.bjpowernode.ba01.Student">
        <property name="name" value="zhangsan"/>
        <property name="age" value="18"/>
    </bean>

      2.引用类型的set注入:
    -->
    <bean id="student1" class="com.bjpowernode.ba02.Student">
        <property name="name" value="zhangsan"/>
        <property name="age" value="18"/>
       <!--引用类型赋值 使用ref-->
        <property name="school" ref="school"/>
    </bean>

    <bean id="school" class="com.bjpowernode.ba02.School">
        <property name="name" value="动力节点"/>
        <property name="address" value="郑州屎"/>
    </bean>
2.构造注入

spring调用类的有参构造方法,在创建对象的同时,在构造方法中完成属性赋值。

构造注入使用 标签

标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,形式参数从左往右位置是 0 1 2 的顺序

 <!--使用name属性实现构造注入-->
    <bean id="myStudent" class="com.bjpowernode.ba03.Student" >
        <constructor-arg name="myage" value="20" />
        <constructor-arg name="mySchool" ref="myXueXiao" />
        <constructor-arg name="myname" value="周良"/>
    </bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.bjpowernode.ba03.Student">
    <constructor-arg index="1" value="22" />
    <constructor-arg index="0" value="李四" />
    <constructor-arg index="2" ref="myXueXiao" />
</bean>
<!--省略index-->
<bean id="myStudent3" class="com.bjpowernode.ba03.Student">
    <constructor-arg  value="张强强" />
    <constructor-arg  value="22" />
    <constructor-arg  ref="myXueXiao" />
</bean>

标签:容器,ac,ApplicationContext,对象,Spring,笔记,学习,spring
From: https://www.cnblogs.com/hellohui/p/16631541.html

相关文章

  • Spring @Autowired 注解静态变量
    最近应该项目的需要,需要使用一个工具类来访问数据库。但是这个工具类又被定义成静态访问了。我们也需要设置一个静态变量来访问数据库。@Autowiredprivatesta......
  • 学习ASP.NET Core Blazor编程系列一——综述
    一、NET6概述   .NET6是微软统一.NetCore与.NetFramework两大框架的第二个版本,微软在.NET5中开始进行这两大框架的统一之路。   .NET6将作为长期支持......
  • 笔记本电脑选购显示器
    https://www.zhihu.com/question/21974872/answer/2141333556USBC的视频输出,通常是集成了其他的技术,比如:HDMI、DP、雷电3和4。如果你的笔记本电脑有支持视频输出的USB......
  • 学习日记 Day2. Java 1
    Java个人小结Java强类型语言;标识符注意概念所有标识符都应该以字母,美元符,或者下划线开始;由字母,美元符,下划线或数字的任意组合;不能使用关键字作为变量名或方法名;......
  • 【SpringBoot】整合Shiro
    1.什么是Shiro?ApacheShiro是一个java的安全权限框架。Shiro是可以非常容易得开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以完成,认......
  • [ROS学习]7. 订阅者Subscriber的编程实现
    笔记参考:【ROS学习笔记】7.订阅者Subscriber的编程实现(C++和Python)基于B站ROS公开课:【古月居】古月·ROS入门21讲基于Ubuntu20.04.1、Noetic版本(部分图摘自:b站【古月居......
  • stm32学习|cubemx配置通用定时器
    stm32学习|cubemx配置通用定时器使用cubemx配置定时器时,存在internalclock和ETR2,后面编程的时候一直没办在在中断函数中处理数据,最后发现应该选择internalclock.Clock......
  • 数论笔记(Full Version)
    数论笔记(FullVersion)一、数论基础:1、整除:重新定义除法:对于计算式:\(a\divb\)来说,其结果可以变化为以下的式子:$$a=\lfloor\frac{a}{b}\rfloor+a\bmodb$$其......
  • 【毒瘤】儒略日 做题笔记
    众所周知:P7075[CSP-S2020]儒略日是一道十分\(EX\)的大模拟作为\(CSP-S\)\(2020\)的\(T1\)远难于\(T2\)。更是有巨佬将过这题的记录放在主页作为自豪的象征。......
  • 2022-08-25 第二小组 张鑫 学习笔记
    实训四十七天元素操作BOM1.学习内容自定义属性设置元素属性<divhaha="abc"id="xyz"></div><script>letdiv=document.querySelector("div");//......