小王紫的Spring框架基础学习day01

Spring框架基础知识

官网 : https://docs.spring.io/spring/docs/4.3.25.RELEASE/spring-framework-reference/htmlsingle

Spring框架介绍:

简介:
Spring是一个简单、开源的开源框架,可以简化企业级开发!
Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。
Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来6创建性能好、易于测试、可重用的代码。
目的:半成品,简化开发。

补充:OOP和AOP概念
OOP:面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。
	 模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它
	 所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
AOP:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一、
	 维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种	衍生范型。
	 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

1、Spring在软件三层架构中的位置

 1.软件的三层架构目的:是为了解耦合。
    2.三层架构:web层(控制层)--->Service层(业务逻辑)--->dao层(持久化层)
    3.各层功能:
    web层(Servlet):1.接收浏览器端的请求。
            2.处理请求
            3.响应数据
    Service层:主要进行业务逻辑处理
                如:事务、分页、
    dao层:和数据库打交道
    
    Spring框架不属于三层中的任意一层。它是一栈式的软件开发框架,是跨三层。

在这里插入图片描述

2、Spring重要知识点梳理

在这里插入图片描述

3、spring的使用步骤

  • 3.1、导入jar包
    在这里插入图片描述

    3.2、在src目录下创建spring的配置文件【beans.xml 或者 applicationContext.xml】
    3.3、创建一个类
    注意:要提供setter、getter方法
    在这里插入图片描述
    3.4、在spring的配置文件中配置该类对象
    在这里插入图片描述
    3. 5、写测试代码

    在这里插入图片描述
    3.6、从spring的容器中【配置文件】获取这个类对象

4、Spring的IOC:

IOC: Inverse Of Controller:、反转控制
          指的是:将bean对象的创建和bean对象关联关系的维护给反转了,由原来我们自己new一个对象,自己维护bean对象之间的关联关系,反转给spring框架 来帮我们创建对象,以及维护对象之间的关联关系。
          IOC解决的问题:上层建筑严重依赖下层建筑的问题

5、获取容器的三种方式:

![在这里插入片描述](https://img-blog.csdnimg.cn/20190920171526228.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk2OTY3OQ==,size_16,color_FFFFFF,t_70在这里插入图片描述

6、从容器中获取bean对象的两种方式及其区别:

 *  1.通过字节码方式  
 *  2.通过id或name值的方式

    区别:
        1.传递的参数不同,一个是传递字节码,另一个是传递的字符串类型的id或者name值
        2.返回值不同,   一个是:字节码类型的对象,另一个是:Object        
	    3.如果需要传递字节码,要求容器中必须有该字节码类型的唯一bean对象     

7、bean标签: 每一个bean标签都对应一个类对象

	 class属性:指定是哪个类的对象,class属性指定类的全类名
	 id属性: 表示该bean对象在容器中的唯一标识符[identifier],该值必须是唯一的
	 name属性:表示该bean对象在容器中的名字,该值也是唯一的

内部bean和外部bean

外部bean:值在beans标签内的bean对象都称为外部bean。外部bean可以被任意bean对象引用
外部bean代码:

在这里插入图片描述
结果:
在这里插入图片描述
内部bean::值在bean标签的某个属性内部定义的bean对象,称之为内部bean。内部bean只能被对象的某个属性引用。
在这里插入图片描述
错误代码演示
这是错误的代码

8、scope属性:作用范围

	scope可以指定当前类对象是单例的还是多例的
    prototype:多例的,对象是在我们从容器中获取对象的时候才被创建
    singleton:单例,默认值,在加载容器对象的时候创建的对象
    request:每一次请求,都会创建一个bean对象
    session:每一次会话,都会创建一个bean对象

在这里插入图片描述

9、bean的生命周期

指对象从创建到销毁执行过程,Bean标签的init-method、destroy-method属性来指定
init-method:配置一个方法作为生命周期初始化方法,Spring会在对象创建之后立即调用
destroy-method:配置一个方法作为生命周期的销毁方法,Spring	容器在关闭 并销毁所有容器中的对象之前调用

在这里插入图片描述
在这里插入图片描述

10、Spring IOC 图解

在这里插入图片描述

代码展示
在这里插入图片描述

11、Bean对象的创建时机、单例、无参构造器

创建时机:默认是在加载spring容器的时候就会创建容器中的bean对象

1.bean对象的创建时机:在容器加载时,按照xml中bean从上到下的顺序创建的
2.底层原理:反射+xml文件的解析
3.容器中对象默认的是单例模式

单例:spring容器中的对象默认都是单例的
无参构造器:spring容器是通过调用反射机制来创建bean对象的

12、IoC是什么

 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

用图例说明一下,传统程序设计如图,都是主动去创建相关对象然后再组合起来:
在这里插入图片描述
  当有了IOC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图
  
在这里插入图片描述

13、IoC和DI

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

谁依赖于谁当然是应用程序依赖于IoC容器;

为什么需要依赖应用程序需要IoC容器来提供对象需要的外部资源;

谁注入谁很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

注入了什么就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

14、分模块配置

通过import标签导入其它配置文件信息

5

15、如何在单例bean中注入一个多例bean

如果我们需要给一个单例beanA注入一个多例beanB时 (**多例注入单例是没有问题的**),
仅仅通过配置Spring是无法帮我们的单例beanA注入一个多例beanB的,即无法让我们每次使
用beanB时都使用的是一个全新的beanB。因为beanA只初始化一次,相对应的Spring只会给
beanA注入一个beanB。解决办法是给beanA注入一个BeanFactory,这样我们就可以在每次需
要使用beanB时都从BeanFactory中获取一个新的beanB。

16、实现自定义的IOC容器:

参考网址:https://www.cnblogs.com/yueyingdiaoling/p/6651416.html

   或者参考如下代码:
   public class ClassPathXmlApplicationContext implements ApplicationContext {

Map<String,Object> map = new HashMap<String,Object>();

public ClassPathXmlApplicationContext(String filename){
	
	// xml解析器
	SAXReader  sr = new SAXReader();
	try {
		//构建一个直接通向配置文件的输入流
		InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filename);
		//将输入流转换为文档对象模型
		Document doc = sr.read(inputStream);
		//获取根元素
		Element root = doc.getRootElement();
		//遍历子元素
		List<Element>  beans = root.elements("bean");
		for(Element bean:beans){			
			String key = bean.attributeValue("name");
			String value = bean.attributeValue("class");
			Class<?> myclass = Class.forName(value);
			//当前对象
			Object obj = myclass.newInstance();
			map.put(key, obj);				
			List<Element> elements = bean.elements("property");
			if(elements.size()>0){
				for(Element pro: elements){
					 String av = pro.attributeValue("name");//dao--->setDao
					 //方法名
					 String methodName="set"+(av.charAt(0)+"").toUpperCase()+av.substring(1,av.length());						 
					 //方法参数
					 String refvalue = pro.attributeValue("ref");
					 Object refobj = map.get(refvalue);						 
					 //根据方法名获取方法对象
					 Method method = myclass.getMethod(methodName,refobj.getClass().getInterfaces()[0]);					 
					 method.invoke(obj, refobj);
				}
			}
		}
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}

public Object getBean(String beanName){		
	return map.get(beanName);
}

}

17、value与< value >注入方式的区别

在这里插入图片描述
xml的预定义实体引用

在这里插入图片描述
例:在这里插入图片描述

三种依赖注入赋值方式

在这里插入图片描述


 3. p命名空间注入
引入p命名空间
xmlns:p=" http://www. spr ingframework. org/ schema/p'”中
<bean id=" course'
class=" org. lanqiao. entity. Course"”p: courseHour=" 300”p: courseName=" hadoop" p:teacher="teacher "></bean>
简单类型:
	p:属性名="属性值”
引用类型(除了String外) :
	p:属性名-ref="引用的id”
注意多个p赋值的时候要有空格。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值