1. spring介绍
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
1.1轻量级:与EJB对比,依赖资源少,消耗的资源少。(EJB指重量级,其通俗点讲是规定要怎么做,但是做了有些用不到)
1.2分层: 一站式是指每一个层都提供了解决方案
web层(表现层):struts,spring-MVC
service层(业务层):spring
dao层(持久层):hibernate,mybatis , jdbcTemplate --> spring-data
1.3 Spring的优点:
- 方便解耦,简化开发 (高内聚低耦合):
(1).Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
(2).spring工厂是用于生成bean - AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
- 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
- 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
- 方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
- 降低JavaEE API的使用难度:•Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
1.4 Spring的体系结构
核心容器:beans、core、context、expression
2. 各种笔记
2.1 简单配置文件
- 位置:任意,开发中一般在classpath下(src)
- 名称:任意,开发中常用applicationContext.xml
- 内容:添加schema约束
- XML文档的schema约束定义了文档的结构,内容和语法,元素和属性等
<?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">
<!-- 配置service
<bean> 配置需要创建的对象
id :用于之后从spring容器获得实例时使用的
class :需要创建实例的全限定类名
-->
<bean id="userServiceId" class="com.itheima.a_ioc.UserServiceImpl"></bean>
<!-- 创建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>
2.2 DI和IoC
- DI(Dependency Injection)依赖注入和IoC(Inversion of Control)控制反转可以看出是同一个东西。
- IoC控制反转:反转的是获取对象的方式(自己new—>从IoC容器中拿)。
- DI依赖注入:将属性值注入给了属性,将属性注入给了bean,将bean注入给了IoC容器。
- IoC/DI,无论要什么对象,都可以直接去springIoC容器中获取,而不需要自己操作(new对象和通过setXxx()方法赋值)。
- IoC操作分两步:
- 第一步:往IoC容器中存放对象(bean)并赋值
- 第二步:拿(拿的对象都是Object类型,用时需强转)
ApplicationContext ct=new ClassPathXmlApplicationContext("applicationContext.xml"); ct.getBean("需要获取的bean的id值");
2.3 核心API
- BeanFactory :这是一个工厂,用于生成任意bean
采取延迟加载,第一次getBean时才会初始化Bean - ApplicationContext:是BeanFactory的子接口,功能更强大。(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现)。当配置文件被加载,就进行对象实例化。
- ClassPathXmlApplicationContext 用于加载classpath(类路径、src)下的xml
加载xml运行时位置 --> /WEB-INF/classes/…xml - FileSystemXmlApplicationContext 用于加载指定盘符下的xml
加载xml运行时位置 --> /WEB-INF/…xml
通过java web ServletContext.getRealPath() 获得具体盘符
- ClassPathXmlApplicationContext 用于加载classpath(类路径、src)下的xml
@Test
public void demo02(){
//使用BeanFactory --第一次条用getBean实例化
String xmlPath = "com/itheima/b_di/beans.xml";
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(xmlPath));
BookService bookService = (BookService) beanFactory.getBean("bookServiceId");
bookService.addBook();