Spring详解

 

1.概述:

Spring 是轻量级的。

为解决企业及开发的复杂性而产生的,是一个轻量级的控制反转和面向切面的容器框架。

控制反转(IOC):将对象的创建权反转给spring,实现了程序的解耦和;

依赖注入(DI):实现ioc实现需要DI做支持,一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的时候给予注入;

注入方式:

set方法注入

构造方法注入

字段注入

注入类型:

值类型注入(8个基本数据类型)

引用类型注入(将依赖对象注入)

 

2.操作:

1.导包

Spring详解

2.创建一个对象:

Spring详解

3.配置注册对象到容器

xml文件,建议放在src下,文件名建议applicationContext.xml

Spring详解

4.代码测试:

Spring详解

3.概念:

applicationContext&BeanFactory

BeanFactory 接口

spring原始接口.最底层的接口。针对原始接口的实现类功能较为单一

BeanFactory接口实现类的容器.特点是每次在获得对象时才会创建对象,为了节省内存

ApplicationContext

每次容器启动时就会创建容器中配置的所有对象.并提供更多功能

从类路径下加载配置文件:ClassPathXmlApplicationContext

从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext(“d:/xxx/yyy/xxx”)

4.配置

4.1spring创建对象的三种方法:

空参构造法:

1.<bean name="user" class="com.User"></bean>

2.ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); //1.创建容器对象,相对于src下的路径

静态工厂:

1.<bean name="user2" class="com.sjtu.b_create.UserFactory" factory-method="createUser"></bean>

2.测试

public void fun2() {

ApplicationContext ac=new ClassPathXmlApplicationContext("com/sjtu/b_create/applicationContext.xml");

User u=(User) ac.getBean("user2");

}

Spring详解

实例工厂:

Spring详解

Spring详解

Spring详解

 

4.2 元素

1.scope属性

singleton(默认值):单例对象,被标识为当日的对象在spring容器中只会存在一个实例

2.prototype

被标识为多例的对象,每次再获得時才会获得对象,每次都是新的的对象。整合Struts时,ActionBean必须配置为多例。

3.request

web环境下,对象与request生命周期一致

4.session

web环境下,对象与session生命周期一致

4.3 属性注入

set方法注入:(前提是set注入之前该对象提供setter方法)

<bean name="user" class="com.User">

<property name="name" value="tom"></property>

<property name="age" value="18"></property>

</bean>

构造方法注入:

<bean name="user2" class="com.User">

<!-- name属性:构造函数参数名 --> <!-- index属性:构造函数参数索引 --> <!-- type属性:构造函数参数类型 --> <!-- 上述三个属性不必全部出现,根据情况选择即可 -->

<constructor-arg name="name" value="Jerry" index="0" type="java.lang.String"></constructor-arg>

</bean>

复杂类型注入:(数组,list,map等)

Spring详解

Spring详解

5.注解配置spring

5.1.步骤

为主配置文件引入新的命名空间(约束)

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd ">

<!-- 指定扫描com.sjtu.bean包下的所有类中的注解

注意:扫描包时,会扫描指定包下的所有子孙包 -->

<context:component-scan base-package="com.sjtu.bean"></context:component-scan>

</beans>

类中完成注解配置

@Component("user") //这四个注解完全一样,以下三个只是为了分层

@Service("user") //Service层

@Controller("user") //Web层

@Repository("user") //Dao层

public class User {

}

5.2.其它注解

scope

//指定对象作用范围

@scope(scopeName="prototype")

public class User{}

值注入类型

//方法一

@Value("Tom")

//加到成员变量上,通过反射的Field赋值,破坏封装性

private String name;

//方法二

@Value("Tom")

//通过set方法赋值

public void setName(String name) {

this.name = name;

}

引用类型引入

Spring详解

Spring详解

Spring详解

初始化,销毁方法

Spring详解

6.aop

AOP是spring框架面向切面的编程思想,aop采用一种称为“横切”的技术,将涉及到多业务流程的通用功能抽取并单独封装。形成独立的切面,再合适的时机将这些切面横向切入到业务流程指定的位置中。

Joinpoint(连接点):程序执行时的某个特定的点,在Spring中就是某一个方法的执行 。

Pointcut(切点):说的通俗点,spring中AOP的切点就是指一些方法的集合,而这些方法是需要被增强、被代理的。一般都是按照一定 的约定规则来表示的,如正则表达式等。切点是由一类连接点组成。 

Advice(通知):还是说的通俗点,就是在指定切点上要干些什么。 

Advisor(通知器):其实就是切点和通知的结合 。

实现步骤:

编写需要切入业务流程的独立模块(也称为切面)和切入点(模块中的方法)

在Spring配置文件中配置AOP,添加切入面、切入点以及需要切入的目标Bean

编写测试代码

实现方式:

采用声明的方式来实现(基于XML)

采用声明的方式实现(在XML文件中配置),大致步骤为:配置文件中配置pointcut, 在java中用编写实际的aspect 类, 针对对切入点进行相关的业务处理。

采用注解的方式来实现(基于AspectJ)

采用注解来做aop, 主要是将写在spring 配置文件中的连接点写到注解里面

7.事务管理

事务是逻辑上的一组操作,要么都执行,要么都不执行

事物的特性(ACID):

原子性:事物的最小单位,不允许分割

一致性:执行事务前后,数据保存一致

隔离性:并发访问数据库时,用户的事务不受其它事物的干扰,并发的数据库之间是独立的

持久性:事务被提交后,再也不受任何影响

接口:

PlatformTransactionManager: (平台)事务管理器

TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)

TransactionStatus: 事务运行状态