Spring简介
Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。
Spring总结起来优点如下:
低侵入式设计,代码的污染极低。
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
Spring框架的组成结构图如下所示:
Spring的DI和IOC
DI:依赖注入,一个BookService类的功能需要依赖另外一个BookDao类配合,同时需要赋上一
个具体的对象,则成这种关系是依赖注入;
IOC:控制反转,以前依赖的对象自己直接new,现在不需要new,框架会自动注入对象,创建对
象的权利转移给了框架;
spring框架负责所有对象的创建、管理和依赖注入;所有的对象存储的容器叫做IOC容器;
1.
创建项目,导入
spring
的
jar包,按照如下目录结构创建接口及其实现类。
![](https://i-blog.csdnimg.cn/blog_migrate/c5f6005812d2388e26329c3696d0cbd6.png)
首先是dao层的包和接口
//BookDaoImpl
public class BookDaoImpl implements BookDao {
@Override
public void insert() {
System.out.println("BookDaoImpl...save");
}
}
//BookDao
public interface BookDao {
void insert();
}
然后是service层的包和接口
// BookServicelmpl
public class BookServicelmpl implements BookService {
private BookDao bookDao;
private String name;
public void setName(String name) {
this.name = name;
}
public void setBookDao(BookDao bookDao){
this.bookDao = bookDao;
}
@Override
public void save() {
System.out.println("BookServicelmpl...save");
bookDao.insert();
}
}
//BookServiceVip
public class BookServiceVip implements BookService {
private BookDao bookDao;
@Override
public void save() {
System.out.println("BookServiceVip...save");
bookDao.insert();
}
}
public interface BookService {
void save();
}
2.
使用
spring
完成
IOC
的配置和
DI
依赖注入,
创建
spring
的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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的IOC容器中,并起上名字
id:表示给对象起名字
class:类的全类名
-->
<bean id="bookDao" class="com.zhang.dao.impl.BookDaoImpl"/>
<bean id="bookService" class="com.zhang.service.impl.BookServicelmpl">
<!--spring的依赖注入:property表示BookServiceImpl的属性,常规属性使用value赋值,
类型属性使用ref引用-->
<property name="name" value="张三"/>
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
注意:
BookServiceImpl
需要给
bookDao
属性设置
setter
方法,框架才能自动注入
3.在
test
中进行测试
public class Test01 {
BookService bookService;
@Test
public void test01() {
System.out.println("BookServlet...add");
//1.获得IOC容器
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("spring.xml");
//2.根据名字从容器中获取对象
bookService = (BookService) context.getBean("bookService");
bookService.save();
}
}