zoukankan      html  css  js  c++  java
  • Java -- Spring学习笔记1、第一个程序

    1、Spring框架是什么?

    Spring是一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。Spring是可以在JavaSE/EE中使用的轻量级开源框架。

    • 主要作用:
      • 为代码"解耦",降低代码间的耦合度。
      • 让对象和对象之间关系不是使用代码关联,而是通过配置来说明
    • 功能特点:
      • Ioc降低业务对象之间耦合度,使得主业务在相互调用过程中不用再自己维护关系、即不用再自己创建对象、而由Spring容器统一管理,自动"注入"、注入即赋值。
      • AOP使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务"混杂"到主业务逻辑中了,而是由Spring容器统一完成"织入"。

    2、Spring有哪些优点?

    • 轻量
    • 针对接口编程,解耦合
    • AOP编程的支持
    • 方便集成各种优秀框架

    3、IoC控制反转是什么?

    控制反转(IoC,Inversion of Control),是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。IOC的实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。当然、在spring框架中还可以使用xml的方式实现。

    • 依赖:A类中含有B的实例,在A中调用B的方法完成功能,即A对B有依赖。
    • Ioc的实现:DI(Dependency Injection),也就是依赖注入、是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

    4、spring的第一个程序

    • 首先创建maven项目、选择quickstart、也就是JavaSE项目
    • 项目构建完成后、在pom.xml文件中添加依赖和插件、如下:
    <!-- 在dependencies里添加spring依赖 -->
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- 在build里添加插件 -->
    <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
    </plugins>
    
    • 在dao层创建接口和实现类、如下:
    // 接口
    public interface SomeService
    {
        void doSome();
    }
    // 实现类
    public class SomeServiceImpl implements SomeService
    {
        @Override
        public void doSome()
        {
            System.out.println("...........执行了doSome()方法............");
        }
    }
    
    • 在main目录下创建resources文件夹、在里边创建spring配置文件、声明bean对象、如下:
      • 注:resources文件夹要设置为Resources Root
    <!-- 
        <bean />:用于定义一个实例对象。一个实例对应一个bean元素。
     -->
    <!-- 
        注册bean对象
        id:自定义对象的名称、通过id在代码中使用该对象
        class:类的全限定名称、不能是接口
     -->
    <bean id="someService" class="com.rg.dao.impl.SomeServiceImpl"/>
    
    • 定义测试类、如下:
    @Test
        public void test01()
        {
            //指定spring配置文件
            String config = "applicationContext.xml";
            //创建spring容器对象
            ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
            //从spring容器中获取对象、使用id
            SomeService someService = (SomeService) ctx.getBean("someService");
            //执行对象的业务方法
            someService.doSome();
        }
    
    • 控制台输出结果:
    ...........执行了doSome()方法............
    
    • 还可以使用spring创建非自定义类对象、如下:
    <bean id="myDate" class="java.util.Date" />
    
    • 测试方法:
    @Test
        public void test02()
        {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //指定spring配置文件
            String config = "applicationContext.xml";
            //创建spring容器对象
            ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
            //从spring容器中获取对象
            Date date = (Date) ctx.getBean("myDate");
            //输出时间
            System.out.println(sdf.format(date));
        }
    
    • 控制台输出:
    2021-05-14
    

    概括来讲、使用spring框架就不需要在代码中创建对象、而是在配置文件中声明bean标签、由spring创建、在代码中通过id获取对象即可。

    5、ApplicationContext接口

    ApplicationContext用于加载Spring的配置文件,在程序中充当"容器"的角色。其实现类有两个。

    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext

    若Spring配置文件存放在项目的类路径下,则使用ClassPathXmlApplicationContext实现类进行加载。

    //指定spring配置文件
    String config = "applicationContext.xml";
    //创建spring容器对象、此时容器中对象已装备完毕
    ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
    

    5.1、ApplicationContext 容器中对象的装配时机

    • ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。如果要证明的话、可以给每个类添加构造函数,在控制台观察、所有类的构造函数都会执行。
    • 使用spring容器创建的的java对象、如图:
    • 以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。
  • 相关阅读:
    用户交互程序
    使用 fetch 封装网络请求,返回promise 对象
    我收藏的脚手架
    DOM API简析
    encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别
    Flex 布局
    react 基础
    javaScript 设计模式
    js 之正则表达式
    如何使用RedisTemplate访问Redis数据结构
  • 原文地址:https://www.cnblogs.com/dcy521/p/14769518.html
Copyright © 2011-2022 走看看