1. Spring是什么
Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的,但现在已经不止适用于企业应用。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
- 从大小与开销两方面而言,Spring都是轻量的
- 通过控制反转(IoC)的技术达到松耦合的目的
- 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发
- 包含并管理应用对象的配置和生命周期,这个意思上是一种容器
- 将简单的组件配置、组合成为复杂的应用
2. Spring的作用
- 容器
- 提供了对多种技术的支持
- JMS
- MQ支持
- UnitTese
- AOP(事务管理、日志等)
- 提供了众多方便应用的辅助类(JDBC Template等)
- 对主流应用框架(Hibernate等)提供了良好的支持
3. 使用范围
- 构建企业应用(SpringMVC+Spring + Hibernate/Mybatis)
- 单独使用Bean容器(Bean管理)
- 单独使用AOP进行切面处理
- 其他的Spring功能,如:对消息的支持等
- 在互联网中的应用
4. 框架与类库的区别
- 框架一般是封装了逻辑、高内聚的,类库则是松散的工具组合
- 框架专注于某一领域,类库则是更通用的
5. 接口及面向接口编程
- 接口:实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方式,使其能被修改内部而不影响外界其他实际与其交互的方式。
面向接口编程
- 结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类
- 接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要
- “面向接口编程”中的接口是用于隐藏具体实现和实现多态性的组合。
6. IOC
- IOC(控制反转),控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
- DI(依赖注入)是其一种实现方式,在IOC容器运行期间,动态将某种依赖关系注入到对象之中。
// xml方式注入
<bean id = "oneInterface" class="com.nqr.ioc.interface.OneInterfaceImpl"></bean>
单元测试
- 下载junit-*.jar并引入工程
- 创建UnitTestBase类,完成对Spring配置文件的加载、销毁
- 所有的单元测试类都继承自UnitTestBase,通过它的getBean方法获取想要得到的对象
- 子类加注解:@RunWith(BlockJUnit4ClassRunner.class)
- 单元测试方法加注释:@Test
- 右键选择要执行的单元测试方法执行或者执行一个类的全部测试方法
@Test
public void testHello(){
OneInterface oneInterface = super.getBean('oneInterface');
System.out.println('测试');
}
- 目的:创建对象并且组装对象之间的关系
7. Bean容器初始化
-
基础:两个包
- org.springframework.beans
- org.springframework.context
- BeanFactory提供配置结构和基本功能,加载并初始化Bean
- ApplicationContext保存了Bean对象并在Spring中被广泛使用
-
方式,ApplicationContext
- 本地文件
- Classpath
- Web应用中依赖servlet或Listener
-
文件初始化
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");
- Classpath
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
- Web应用
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
</servlet>
8. Spring注入
- Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
- 常用的两种注入方式
- 设置注入
<bean id = "injectionService" class = "com.ioc.injection.service.InjectionServiceImpl/"> <property name="injectionDao" ref = "injectionDao" /> </bean> <bean id = "injectionDao" class = "com.ioc.injection.dao.InjectionDAOImpl"></bean>
public inteface InjectionDAO{ public void save(String args); } public class InjectionDAOImpl implements InjectionDAO{ public void save(String arg){ // 模拟数据库保存操作 System.out.println("保存数据:" + arg); } } public interface InjectionService{ public void save(); } public class InjectionServiceImpl implements InjectionService{ private InjectionDAO injectionDAO; // 设置注入 public void setInjectionDAO(InjectionDAO injectionDAP){ this.injectionDAO = injectionDAO; } public void save(String arg){ System.out.println("Service接收参数:" + arg); arg += ":" + this.hashCode(); // 调用injectionDAO injectionDAO.save(arg); } }
- 构造注入