一、什么是Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由 RodJohnson 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而,Spring 的用途不仅限于服务器端的开发,去开发android也可以。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 的核心是控制反转 (IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。
二、Spring的配置
1,ApplicationContext.xml中bean元素相关配置各个标签的作用
bean元素:使用该元素描述spring容器管理的对象
name属性:给被管理的对象起个名字,获得对象是根据名称获得对象
class属性:被管理对象的完整类名
ID属性:与name属性一模一样,关于ID的话,名称不可重复,不能使用特殊字符;name属性名称则可以重复,可以使用特殊字符。结论:尽量使用name属性。
1.1 Bean元素的进阶,scope属性(重点是singleton和prototype):
一般情况下是使用singleton,但是要整合struts2时则要在ActionBean中使用prototype。而request和session属性基本上是用不到的。
singleton(默认值):单例对象,所谓单例对象,就是在spring容器中只会存在一个的实例
prototype属性:多例原型被标记为多例的对象,每次再获得才会创建并且每次创建都是新的对象
request: web环境下,对象与request生命周期一致,也就是每当请求处理完一次,对象将从spring容器中移除
session:web环境下,对象与session生命周期一致
1.2 Bean元素的进阶,生命周期属性(了解)
生命周期属性,配置一个方法作为生命周期初始化方法,spring会在对象创建之后立即调用(init-method)。也可以配置一个对象作为销毁方法,spring在关闭并销毁所有容器中的对象之前调用(destory-method)
2,三种对象创建方式
创建方式一:空参构造创建(重点)
配置文件
然后只需在demo.java中编写测试类
创建方式二:静态工厂创建(了解)
配置:
调用UserFactory的createUser方法创建名为user2的对象.放入容器
<bean name="user2"
class="cn.itcast.b_create.UserFactory"
factory-method="createUser" ></bean>
userFactory.Java工厂如下:
最后编写测试类
三、Spring的使用
3.1目标类
- 创建BookService接口和实现类
- 创建BookDao接口和实现类
- 将dao和service配置 xml文件
- 使用api测试
3.2 dao
public interface BookDao { public void save(); } public class BookDaoImpl implements BookDao { @Override public void save() { System.out.println("di add book"); } }
3.3 service
public interface BookService { public abstract void addBook(); } public class BookServiceImpl implements BookService { // 方式1:之前,接口=实现类 // private BookDao bookDao = new BookDaoImpl(); // 方式2:接口 + setter private BookDao bookDao; public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; } @Override public void addBook(){ this.bookDao.save(); } }
3.4 配置文件
<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"> <!-- 模拟spring执行过程 创建service实例:BookService bookService = new BookServiceImpl() IoC <bean> 创建dao实例:BookDao bookDao = new BookDaoImpl() IoC 将dao设置给service:bookService.setBookDao(bookDao); DI <property> <property> 用于进行属性注入 name: bean的属性名,通过setter方法获得 setBookDao ##> BookDao ##> bookDao ref :另一个bean的id值的引用 --> <!-- 创建service --> <bean id="bookServiceId" class="com.itheima.b_di.BookServiceImpl"> <property name="bookDao" ref="bookDaoId"></property> </bean> <!-- 创建dao实例 --> <bean id="bookDaoId" class="com.itheima.b_di.BookDaoImpl"></bean> </beans>
3.5 测试
@Test public void demo01(){ //从spring容器获得 String xmlPath = "com/itheima/b_di/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); BookService bookService = (BookService) applicationContext.getBean("bookServiceId"); bookService.addBook(); }