文章目录
一、Spring概述
1.Spring全家桶
Spring,SpringMVC,Springboot,Springcloud
Spring在2002年左右出现,目的是用于解决企业开发的难度
2.Spring的核心技术:ioc和aop
能实现模块之间和类之间解耦合
依赖:classa中使用classb的属性或方法, 叫做classa依赖classb
二、IOC(控制反转)
1.框架简介和学习
框架是一个其它人写好的软件。
1)知道框架能做什么,比如mybatis用于访问数据库, 对表中的数据执行增删改查。
2)了解框架的语法,框架需要一定的步骤支持才能完成一个功能
3)了解框架的内部实现,框架内部怎么做。原理是什么。
4)通过学习,自己实现一个框架。
2. IoC (Inversion of Control)
Ioc指的是控制反转,Ioc是一个理论,概念,思想。
IoC描述的是:将对象的创建,赋值,管理工作都交给代码之外的容器实现,即对象的创建由其它外部资源完成。
控制:创建对象,给对象的属性赋值以及对象之间的关系管理。
反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象。创建对象,给属性赋值。
正转:由开发人员在代码中,使用new 构造方法创建对象, 开发人员主动管理对象。
public static void main(String args[])
{
//在代码中创建对象。(正转)
Student student = new Student();
}
容器:容器是一个服务器软件,一个框架(比如spring)
3.为什么要使用 ioc?
使用ioc可以减少对代码的改动,实现不同的功能,同时实现解耦合。
4.java中创建对象的方式:
1.构造方法:new Student()
2.反射机制
3.序列化
4.克隆
5.ioc:容器创建对象
6.动态代理
5.ioc的一个例子(Servlet)
对于Servlet
(1)创建类继承HttpServelt
(2)在web.xml 注册servlet , 使用
<servlet-name> myservlet</servlet-name>
<servelt-class>Servlet.MyServlet</servlet-class>
(3)程序员没有主动创建Servlet对象( MyServlet myservlet = new MyServlet())
(4)这个Servlet对象 是Tomcat服务器创建的,因此Tomcat也称为容器
Tomcat作为容器:里面存放Servlet对象, Listener对象, Filter对象
6.IoC技术的实现
DI 是ioc的技术实现
DI(Dependency Injection):依赖注入,只需要在程序中提供要使用的对象名称就可以,至于对象如何在容器中创建,赋值,查找都由容器实现。
spring使用了di实现了ioc的功能, spring底层使用反射机制创建对象
spring是一个容器,它能管理对象并给属性赋值
6.第一个Spring
SpringIoC,由Spring创建对象
实现步骤
(1)创建Maven项目
(2)加入Spring的依赖,版本5.2.5
<!--Spring的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
加入junit依赖
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
(3)创建类(接口和它的实现类):一个普通的类
接口
package HelloSpring;
public interface Some
{
public void doSome();
}
实现类
package HelloSpring;
public class SomeImpl implements Some
{
public void doSome()
{
System.out.println("Some.doSome execute");
}
}
(4)创建Spring需要使用的配置文件
需要声明类的信息,这些类由spring创建和管理
<?xml version="1.0" encoding="UTF-8"?>
<!--
Spring的配置文件
1.beans:根标签,Spring把java对象称为bean
2.spring-beans.xsd 是约束文件,和mybatis指定的dtd是一样的
-->
<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,告诉Spring要创建的类的对象
id:自定义对象的名称(唯一值),Spring通过这个名称找到对象
class:类的全限定名称(不能是接口,因为Spring通过反射机制创建类对象)
Spring完成以下工作:
SomeImpl some = new SomeImpl();
Spring将创建好的对象放入Map中,Spring框架中有一个Map专门用于存放对象
SpringMap.put("some",new SomeImpl())
注意:一个bean标签声明一个对象
-->
<bean id="some" class="HelloSpring.SomeImpl"></bean>
</beans>
(5)测试Spring创建的对象
写在测试类里
package HelloSpring;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest
{
@Test
public void test01()
{
/**
*
* Spring创建对象的时机:在创建Spring的容器时,会创建配置文件中所有的对象
*
* */
//使用Spring容器创建的对象
//1.指定Spring配置文件的名字
String config = "beans.xml";
//2.创建ApplicationContext对象,这个ApplicationContext对象用于表示Spring容器
//可以通过ApplicationContext对象获取想要的对象
//ClassPathXmlApplicationContext:从类路径中加载Spring的配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//3.从容器中获取对象
Some some = (Some)ac.getBean("some");
//Some.doSome execute
some.doSome();
}
}
7.获取容器中对象信息的方法
这里演示了两个方法
@Test
public void test02()
{
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config);
//获取容器中定义的对象的数量
int num = ac.getBeanDefinitionCount();
System.out.println("num = " + num);
//获取容器中定义的每个对象的名称
String[] names = ac.getBeanDefinitionNames();
for(int index = 0;index < names.length;index++)
{
System.out.println(names[index]);
}
}