1、几个框架简单介绍
2、Spring概念
Spring是一个开源的框架,是为了解决企业应用开发的复杂性而创建的。该框架的一个主要优势是其分层架构,Spring的核心是控制反转(IoC)和面向切面(AOP)。
分层:web层(struts、spring-MVC)、service层(spring)、dao层(hibernate、mybatis、jdbcTemplate)
优点:方便解耦,简化开发。Spring就是一个大工厂(容器),用于生成bean,可以将所有对象创建和依赖关系维护,交给Spring管理;只需要通过配置就可以对事务进行管理,无需手动编程;等。
体系结构:
核心容器:beans、core、context、expression
3、入门案例:IoC
一、导入jar包
4 + 1:四个核心、一个依赖
二、目标类
- 提供UserService接口和实现类
- 获得UserService实现类的实例
之前的开发中,直接new一个对象即可。学习Spring之后,将由Spring创建对象实例,即IoC控制反转(Inverse of Control)。之后,需要实例对象时,从Spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中。
创建接口类和接口实现类,如图:
三、配置文件
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束
如图,第一张是全限定名称复制过程,第二张是配置文件内容。
四、测试
建立测试文件,如图:
4、入门案例:DI(依赖注入)
描述
DI(Dependency Injection),依赖注入。
is a :是一个,继承
has a :有一个成员变量,依赖
class B{
private A a; // B类依赖A类
}
依赖:一个对象需要使用另一个对象
注入:通过setter方法进行另一个对象实例设置。
例如:
class BookServiceImpl{
//之前开发:接口=实现类(service和dao耦合)
//private BookDao bookDao = new BookDaoImpl();
//Spring之后(解耦:service实现类使用dao接口,不知道具体的实现类)
private BookDao bookDao
setter方法
}
一、 目标类
- 创建BookService接口和实现类
- 创建BookDao接口和实现类
- 将dao和service配置到xml文件中
- 使用api测试
dao
service
二、配置文件
三 、测试
总结,整个过程相当于通过一系列配置、编程实现了bookService可以直接调用addBook
5、核心API
API整体了解,之后不再使用,在学习过程中需要。
6、装配Bean基于XML
6.1、实例化方式
3种bean实例化方式:默认构造、静态工厂、实例工厂
一、默认构造
之前所有的都属于默认构造。
二、静态工厂
- 常用于Spring整合其他框架(工具)。
- 用于生成实例对象,所有的方法必须是static。
- 配置如图:
工厂
spring配置
再往后的开发中,工厂是别人已经写好的,需要写的是配置信息。相当于把别人的工厂拿来,说下方法名,把生产后的东西给spring,然后我们可以通过spring拿。如图:
三、实例工厂
- 实例工厂,必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的。
工厂
spring配置
6.2、Bean种类
6.3、作用域
作用域:用于确定spring创建bean实例个数。
取值:
singleton,单例,默认值。
prototype,多例,每执行一次getBean将获得一个实例。例如,struts整合spring,配置action多例。
配置信息:
6.4、生命周期
一、初始化和销毁
- 目标方法执行前或执行后,将进行初始化或销毁。
目标类
spring配置
测试
二、BeanPostProcessor(后处理Bean)
- Spring提供了一种机制,只要实现此接口 BeanPostProcessor,并将实现类提供给spring容器,spring容器将自动执行,在初始化方法执行前执行befre(),在初始化方法后执行after()。配置信息
- spring提供的工厂钩子,用来修改实例对象,可以生成代理对象,是AOP底层。
编写实现类
配置
- 问题一:后处理bean作用某一个目标类,还是所有目标类?
所有 - 问题二:如何只作用一个?
通过 “参数2” beanName进行控制
6.5、属性依赖注入
- 依赖注入方式:手动装配 和 自动装配
- 手动装配:一般进行配置信息都采用手动,基于xml装配:构造方法、setter方法;基于注解装配。
- 自动装配:struts 和spring整合可以自动装配,byType:按类型装配;byName:按名称装配;constructor:构造装配;auto:不确定装配。
一、构造方法
目标类
spring配置
二、setter方法
三、P命名空间(了解)
- 对 “setter方法注入” 进行简化,替换,而是在<bean p:属性名=“普通值”
p:属性名-ref=“引用值”> - p命名空间使用的前提,必须添加命名空间
四、SpEL(了解)
6.6、集合注入
7、装配Bean基于注解
- 注解:就是一个类,使用@注解名称
- 开发中:使用注解取代 xml 配置文件。
- 注解使用时前提,添加命名空间,让spring扫描含有注解的类,如图:
schema命名空间(回顾)
a、命名空间声明
默认:xmlns="" <标签名> -->
显示:xmlns:别名="" <别名:标签名> --> context:...
b、确定schema.xsd文件位置
xsi:schemaLocation=“名称 位置 名称2 位置2…”
内容都是成对[名称 位置]
一、@Component 取代
如图:
二、web开发中,提供了3个@Component 注解的衍生注解(功能一样)
@Repository : dao层
@Service : service层
@Controller : web层
三、依赖注入,给私有字段设置,也可以给setter方法设置
普通值:@Value("")
引用值:
四、例子
测试类,程序的入口,如下图:
根据测试类,进入action(StudentAction.java),如下图:
上图中,@Controller(“studentActionId”)取代的是bean的配置。接下来程序进入service层,如下图:
上图中@Service的含义如图:
接下来,程序进入dao层
关系如下图:
五、生命周期
两个注解,一个是初始化:@PostConstruct;另一个是销毁:@PreDestroy
六、作用域
@Scope(“prototype”) 多例