说明:
本人初学java,写博客是为了对知识的复习和总结,如有错误,请赐教。
【一】、什么是Spring?
(1)概念:
--> Spring是一个开源的轻量级框架,为解决企业应用程序开发复杂性而创建
(2)核心思想:
--> “拿来主义”,把业界最好的技术黏合在一起组成一个强大的企业级应用框架
【二】、Spring的组成
(1)Spring core 核心容器
--> 提供了Spring框架的基本功能
--> Spring core的主要组件是BeanFactory,是工厂模式的实现
--> BeanFactory利用IOC模式将应用程序的配置和依赖性规范与应用程序代码分开,实
降低了耦合性
--> 核心容器定义了创建、配置、管理bean的方式
(2)Spring Context
--> 是Spring的配置文件,给Spring框架提供上下文信息;Spring的核心配置文件:applicationContext.xml
(3)Spring AOP
-->为基于Spring的应用程序对象提供了事物管理服务,不用依赖EJB
(4)Spring DAO
--> 管理异常处理和不同数据库供应商抛出的错误消息
(5)Spring ORM
--> Spring框架插入了若干个ORM框架,从而提供了ORM对象映射工具
(6)Spring WEB
--> WEB模块建立在 SpringContext之上,为基于Web的应用程序提供了上下文
(7)SpringMVC
--> MVC框架通过把Model、View、Controller分离,将复杂的web应用分成逻辑清
晰的几部分,简化了开发,减少出错
&&总结:
--> Spring是一个开源的、非入侵式的轻量级框架,分七个模块组成,其中
核心容器提供了Spring框架的基本功能;核心思想是“拿来主义”,核心要点是
“支持在不同的J2EE(web或EJB)”环境之间重用
【三】、Spring三大核心组件的关系
--> 把Bean比作演员的话,Context就是舞台背景,Core就是演出时需要用的工具
--> Bean对象的本质就是java对象,不同点在于将创建和管理对象的权利交给了外部容器;Context要做的事就是发现Bean之间的关系,从而管理并维护Bean之间的关系;那怎么去发现Bean之间的关系呢?这就是Core要做的事了,Core提供了许多工具以便于Context去发现Bean之间的关系
【四】、Spring框架的两大核心:IOC和DI
--> IOC控制反转:把创建和管理对象生命周期的权力交给Spring容器;为什么叫反转?在没有Spring框架的时候,创建和管理对象是程序本身,而Spring框架诞生后,这个活由Spring容器来完成,这种创建和管理对象的权力的转换称之为反转
-->DI依赖注入:
在以前,当我们需要建立两个对象之间的依赖关系时,需要我们在一个对象中创建另一个对象的实例,如:我们在Person类中用Student s = new Student()这样的代码建立于Student类之间的关系;而现在Spring框架说:以后创建对象,建立(注入)和维护对象之间的依赖关系乃至于对象生命周期的管理都让我来做,你需要的时候和我说一声就行,我直接给你用!所以Spring既像为我么打工的又像是我们的好兄弟!
&&注意:
IOC和DI是同一概念,因为不管是IOC还是DI都是为了说明Spring采用动态的、灵活的方式来创建和管理对象。
【五】、IOC和DI的实现方式
--> IOC实现方式之配置XML文件
&&注意:
Spring容器完成对象的存储是通过k,v的数据结构,K表示Bean对象的唯一标识,通过配置XML文件方式获取Spring容器里的对象时,K是xml文件中bean标签的属性id的值
-->IOC实现方式之注解@
(1)在需要Spring容器创建对象的类上加@Component注解,@Service注解用来业务层,@Controller用在控制层,@Component在不确定用途的时候使用
(2)同样需要配置XML文件,不过所用的标签不同
&& 这里解释一下为什么说是标签:因为XML是一种可扩展的标记语言,所以XML文件自然需要用到标签
&& context标签里的属性component-scan可以理解为@component注解扫描器,而base-backage指定了要扫描的包路径
--> DI依赖注入方式:
常用的有三种方式:
(1)@Autowired注解
基于Spring应用开发下,依赖注入的前提是控制反转,需要被注入的对象对应的类上需要标记@Component注解
(2)构造注入
说白了就是通过构造方法传参,如:
Student s = new Student();
Student s2 = new Student();
Teacher t = new Teacher(s,s2);
(3)set注入
说白了就是通过set方法将对象的实例赋值给被注入的对象的属性,如:
setStudent(s);