基本概念
Spring 是一个轻量级的,IOC和AOP的一站式Java 开发框架,是为了简化企业级应用开发而生的
轻量级:框架核心模块体积小
IOC:Inversion of Control(控制反转)把创建对象的控制权反转给Spring框架管理
以前我们程序中需要对象时都是程序员自己进行新建
AOP:Aspect Oriented Programming面向切面编程
将程序中一些公共的非业务的代码进行分离提取,然后在业务代码执行时,把这些非业务代码横切进入执行,这使用了动态代理机制实现,业务代码在不显示的调用时会通过代理对象调用非业务对象
一站式:除了核心的功能之外,还对数据访问层和web层都进行了封装
spring框架的搭建
1.创建一个普通的moven工程
2.导入spring框架最基础的jar包(在pom.xml中导入jar包,完成后可以在External Libraries中查看到导入的6个jar包)
3.在resorce中创建一个文件,在该文件中对spring框架进行最基础的配置(配置中xsd文件对该配置文件中可以编写的类进行限制)
4.创建你的java程序的基本结构,例如在以下代码中在java下创建model包,在其中创建一个实现类Admin,并在实现类中定义相应的方法和变量,并重写其中的get,set,有参构造方法(重写有参构造方法是必须重写无参构造方法),Admin类的创建,将用于后续对spring框架功能的测试
5.继续我们创建相应的包test,在该包中创建相应的测试类对spring框架的功能进行测试(如下图所示,我们创建了相应的测试类,但在该类中所写的代码为我们为学习spring前使用相应实现类时需要先创建类的对象,然后通过类的对象调用类中的方法)
6.如果我们需要spring框架对我们创建的实现类进行管理,我们需要在spring。xml中对我们所要管理的类进行配置(下面代码展示的配置中id需要我们自己进行命名,class需要写入我们所要管理的类的全类名)
7.完成相应的配置后,我们就可以在测试类中通过spring框架进行调用配置后的实现类并使用
id 属性需要我们自主进行命名,即是我们对该类创建对象的名称,class属性指我们需要操作的类的全名 使用 bean标签操作需要spring管理的类的,利用getBean可以获得spring生成的对象 scope属性配置的是bean的作用域(范围) scope="singleton" 默认取值 单例的 在spring框架启动时就创建对象,只会创建一次 scope="prototype" 原型的(多例的) 在spring每次获得对象时都会创建一个对象
Spring bean 管理
基于xml生配置的方式(介绍scope,运行结果为当选择原型的时候,创建的两个Admin对象输出的结果)
依赖注入
IOC指的是让spring对象创建对象,创建对象的同时还有一个动作称为依赖注入 依赖注入是指在创建类对象时为对象的属性赋值
两种方式
1.通过属性注入(属性的set方法)
2.通过构造方法注入
8.再次对Java程序进行扩展,创建新的包service和dao包,模拟后端程序与数据库进行交互
9.分别在对应的包里面创建相应的类
10.在adminService类中创建adminDao类的对象,并重写set和get方法
11.在xml文件中将类配置给spring进行管理,再对其进行依赖注入
12,在测试类中进行执行
注解方式实现:
13.开启注解扫描
14.在需要spring管理的类上方加上注解标签即可实现spring对类的管理与依赖注入
15.使用spring进行注入时,注入的类也必须被spring管理(例如使用注解标签对类AdminDao进行注入,AdminDao也必须被注解,即被spring管理)
16.对于@Autowired注解标签
@Autowired注解可以使用在属性或set方法前,当写在属性前时,我们就不需要在写该属性的set方法,对于该注解标签所标注的属性,一般要求传入的值不为null,如果我们想传入空值,必须设置@Autowired注解标签的require属性为false
@resource的用法与@Autowired类似
我们进行一些演示
对于@Autowired注解的注入,我们有两种不同的注入方式
方法一:通过属性的类型进行查找,即是如上述代码所演示的,我们使用类型+命名的方式查询到对应的类,然后进行注入
方法二:我们通过对象的名字进行查找,需要用的相应的注解标签@Qualifier,同时我们也需要在对应类中进行命名
17.对于xml和注解两种方式进行spring管理的比较