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的体系结构

spring nature杂志的参考文献如何编译_加载

核心容器: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

spring nature杂志的参考文献如何编译_spring初学笔记_02

  • 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() 获得具体盘符
@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();