Spring IOC 和 AOP
一、基础概念
Spring
是一个基于
IOC
和
AOP
的 J2EE 系统的
框架
。
①、IOC (反转控制)
是 Spring 的基础,Inversion Of Control。简单说就是
创建对象由以前的程序员
自己 new 构造方法来调用,变成了交由 Spring 创建对象。
②、DI (依赖注入
Dependency Inject),
简单地说就是拿到的对象的属性,已经被注入好相关值了,
直接使用即可。
二、实验目的
本知识点通过运行 TestSpring 演示
如何用 Spring 获取一个对象,并打印其 name(属性)
。
三、实验步骤
步骤 1: 新建项目
在 E
:\idea\项目\SSM 目录
下新建 SSMproject1 项目 (
java project 类型
)。
步骤 2 : 下载包
将 lib1.rar 解压到 E:\idea\项目\ssm 工具包\lib1
目录
下
步骤 3: 导入包
把 jar 包导入到项目中,
导包办法:右键 project->properties->java build path->libaries->add
external jars
步骤 4: pojo
准备
pojo Category
,用来演示 IOC 和 DI
步骤 5 : applicationContext.xml
在 src 目录下新建
applicationContext.xml
文件。applicationContext.xml 是
Spring 的核心配置文件
,
通过关键字 c 即可获取 Category 对象,该对象获取的时候,即被注入了字符串"category 1
“
到 name 属性 中
:
步骤 6 : TestSpring
测试代码,演示通过 spring 获取 Category 对象,以及该对象被注入的 name 属性。
如图所示,可以打印出通过 Spring 拿到的 Category 对象的 name 属性
拓展实验:
扩展部分:建立学生类:student(学号,姓名,数学。英语),并定义张三、李四两位学生信息,查询显示他们数学的成绩。
Student.java
TestSpring.java
applicationContext.xml
运行结果:
四、 实验代码
1、Category.java
package
com.mytest.pojo;
public class
Category {
private int
id
;
private
String
name
;
public
Category() {}
public
Category(
int
id, String name) {
this
.
id
= id;
this
.
name
= name;
}
/**
*
获取
*
@return
id
*/
public int
getId() {
return
id
;
}
/**
*
设置
*
@param
id
*/
public void
setId(
int
id) {
this
.
id
= id;
}
/**
*
获取
*
@return
name
*/
public
String getName() {
return
name
;
}
/**
*
设置
*
@param
name
*/
public void
setName(String name) {
this
.
name
= name;
}
}
2、TestSpring.java
package
com.mytest.pojo;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class
TestSpring {
public static void
main(String[] args) {
ApplicationContext context =
new
ClassPathXmlApplicationContext(
new
String[]{
"applicationContext.xml"
});
Category c = (Category) context.getBean(
"c"
);
System.
out
.println(c.getName());
}
}
3、applicationContext.xml
<?
xml version
="1.0"
encoding
="UTF-8"
?>
<
beans
xmlns
="http://www.springframework.org/schema/beans"
xmlns:
xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:
aop
="http://www.springframework.org/schema/aop"
xmlns:
tx
="http://www.springframework.org/schema/tx"
xmlns:
context
="http://www.springframework.org/schema/context"
xsi
:schemaLocation
="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<
bean
name
="c"
class
="com.mytest.pojo.Category"
>
<
property
name
="name"
value
="category 1"
/>
</
bean
>
</
beans
>
五、 实验总结
1、什么是 IoC
IoC:控制反转\反转控制,)是一种设计思想或者说是某种模式。这个设计思想就是将原本
在程序中手动创建对象的控制权,交由 Spring 框架来管理。IoC 容器是 Spring 用来实现
IoC 的载体, 实际上就是个 Map(key,value),Map 中存放的是各种对象。
2、IoC 解决了什么问题?
IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相关的资源,这样会使得对象之
间的耦合度或者说依赖程度降低。同时资源会变得容易管理,比如用 Spring 容器提供的话就
很容易实现一个单例。
3、什么是 AOP?
AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种
延续。
切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻
辑
面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。
这里有一个面的概念
4、AOP 解决了什么问题?
OOP 编程思想可以解决大部分的代码重复问题,但是有一些问题是处理不了的:比如在父
类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了。而 AOP 就是用来
解决。切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横
切逻辑。面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成
一个面。这里有一个面的概念
AOP 提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离。在不改变原有业务逻辑的
情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。