Spring是什么
相关概念
Spring是另一个主流的java Web开发框架,它是一个轻量级的应用框架,以Ioc(控制反转)和Aop(面向切面编程)为内核
Spring的优点
1)方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring管理
2)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持
3)降低Java EE API的使用难度
Spring对Java EE开发中非常难使用的一些API都提供了封装,使这些API的难度大大降低
4)方便程序的测试
Spring支持JUnit4,可以通过注解方便的测试Spring程序
5)AOP编程的支持
Spring提供面向切面的编程,可以方便的实现对程序进行权限拦截和运行监控等功能
6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
Spring的体系结构
Spring Ioc容器
什么是Ioc?
Ioc是指在程序开发中,实例的创建不再由调用者管理,而是由Spring容器创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了Spirng容器中,控制权发生了反转,这就是Spring的Ioc思想
Spring提供了两种Ioc容器,分别为BeanFactory和ApplicationContext
BeanFactory
BeanFactory就是一个管理Bean的工厂,它主要负责初始化各种Bean,并调用他们的生命周期方法
ApplicationContext
ApplicationContext是BeanFactory的子接口,也被称为应用上下文,它不仅提供了BeanFactory的所有功能,还添加了对i18n(国际化)、资源访问、事件传播等方面的良好支持
ApplicationContext接口有两个常用的实现类,具体如下:
1)ClassPathXmlApplicationContext
该类从类路径ClassPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作,具体如下所示。
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(String configLocation);
在上述代码中,configLocation参数用于指定Spring配置文件的名称和位置,如applicationContext.xml
2)FileSystemXmlApplicationContext
该类从指定的文件系统路径中寻找指定的xml配置文件,找到并装载完成ApplicationContext的实例化工作它与 ClassPathXmlApplicationContext 的区别是:在读取 Spring 的配置文件时,FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,它可以获取类路径之外的资源
第一个Spring程序
创建项目
创建web项目,将所需的jar包复制到web目录中,并添加到类路径下
创建PersonDao接口
package com.mengma.ioc;
public interface PersonDao {
public void add();
}
创建接口的实现类PersonDaoImpl
package com.mengma.ioc;
public class PersonServiceImpl implements PersonService {
//定义接口声明
private PersonDao personDao;
//提供set方法,用于依赖注入
public void setPersonDao(PersonDao personDao){
this.personDao=personDao;
}
@Override
public void addPerson() {
personDao.add();
System.out.println("addPerson()执行了...");
}
}
创建Spring配置文件
在src目录下创建Spring的核心配置文件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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- 由 Spring容器创建该类的实例对象 -->
<bean id="personDao" class="com.mengma.ioc.PersonDaoImpl" />
</beans>
编写测试类
package com.mengma.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FirstTest {
@Test
public void test1() {
//定义Spring配置文件的路径
String xmlPath="applicationContext.xml";
//初始化Spring容器,加载配置文件
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
//通过容器获取PersonDao的实例
PersonDao personDao=(PersonDao)applicationContext.getBean("personDao");
//调用PersonDao的add方法
personDao.add();
}
}
上述代码中,首先定义了Spring容器的配置文件的路径,然后定义了Spring容器,接下来通过了Spring容器获取了PersonDao实例,调用了add()方法