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对象、如图:
- 以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。