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对象、如图:
  • 以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。
posted @ 2021-05-14 18:05  初晨~  阅读(50)  评论(0编辑  收藏  举报