Spring框架

spring简介以及官方压缩包的介绍

(1) 什么是Spring?

Spring是一个轻量级控制反转(IOC) 和面向切面(AOP)的容器框架。
IOC inversion of conrol
AOP aspect oriented programming

(2) 简述Spring官方压缩包中常用jar包的功能?

在这里插入图片描述

2. Spring版本差异及IoC介绍

(1) Spring不同版本具有哪些新特性?

在这里插入图片描述

(2) 如何理解Spring的IoC?

控制反转,是一个概念,是一中思想。控制反转就是对对象控制权的转移,从程序代码转移到了外部容器。把对象的创建、初始化与销毁等工作交给Spring容器来做。就是由Sping容器来控制对象的生命周期。

3. SpringIoC第一个程序环境搭建

(1) 简述SpringIoC程序环境搭建步骤?

1、导入jar包。(基本7个)
在这里插入图片描述
2、创建Spring的配置文件
在这里插入图片描述
3、Bean的创建与注册

<!-- 注册工厂-->	
   	<bean id="serviceFactory" class="com.bjsxt.factory.ServiceFactory"></bean>

4、从Spring容器中获取Bean

<!-- 从工厂中获取SomeServiceImpl的bean对象 -->
	<bean id="someServiceImpl" factory-bean="serviceFactory" factory-method="getSomeService"></bean>

(2) Spring配置文件没有提示,如何解决?

将约束文件绑定到本地,在断网下也可以有提示
在这里插入图片描述
将http://www.springframework.org/schema/beans/spring-beans.xsd 作为key,location就是
其对应的本地约束文件的路径

4. SpringIoC第一个程序的实现

(1) 如何从容器中获取bean对象?

配置文件

<?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">
	<!-- bean的定义 ,以下的配置相当于SomeService service = new SomeServiceImpl()-->	
   	<bean id="someServiceImpl" class="com.bjsxt.service.impl.SomeServiceImpl"></bean>
</beans>

测试类

public class SomeTest {
	//该方式的缺点:当前测试类与service类耦合在一起
	@Test
	public void someTest(){
		SomeService service = new SomeServiceImpl();
		service.doSome();
	}
	//该方式的优点:实现了测试类与service类的解耦合
	@Test
	public void someTest01(){
		//创建容器对象,ApplicationContext容器初始化时,容器中所有的bean创建完毕
		//当用到容器中的对象时,不需要现创建,执行效率较高,占用内存相对大
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService someService = ac.getBean("someServiceImpl",SomeService.class);
		someService.doSome();
	}
	@Test
	public void someTest02(){
		//创建容器对象 BeanFactory当调用getBean方法获取相应的对象时才创建对象
		//当用到容器中的对象时,需要现创建,执行效率较低,占用内存相对小
		BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		SomeService someService = bf.getBean("someServiceImpl",SomeService.class);
		someService.doSome();
	}

(2) 使用SpringIoC有什么好处?

DI和IOC其实是一个思想,她们的的好处是:如果依赖的类修改了,比如修改了构造函数,如果没有依赖注入,则需要修改依赖对象调用着,如果依赖注入则不需要。

spring IOC的好处是,对象的构建如果依赖非常多的对象,且层次很深,外层在构造对象时很麻烦且不一定知道如何构建这么多层次的对象。 IOC 帮我们管理对象的创建,只需要在配置文件里指定如何构建,每一个对象的配置文件都在类编写的时候指定了,所以最外层对象不需要关心深层次对象如何创建的,前人都写好了。

5. BeanFactory和ApplicationContext区别

(1) BeanFactory与ApplicationContext之间是什么关系?

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。
ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承

(2) 简述BeanFactory和ApplicationContext的区别

@Test
	public void someTest01(){
		//创建容器对象,ApplicationContext容器初始化时,容器中所有的bean创建完毕
		//当用到容器中的对象时,不需要现创建,执行效率较高,占用内存相对大
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		SomeService someService = ac.getBean("someServiceImpl",SomeService.class);
		someService.doSome();
	}
	@Test
	public void someTest02(){
		//创建容器对象 BeanFactory当调用getBean方法获取相应的对象时才创建对象
		//当用到容器中的对象时,需要现创建,执行效率较低,占用内存相对小
		BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		SomeService someService = bf.getBean("someServiceImpl",SomeService.class);
		someService.doSome();
	}

6. Bean的装配之动态工厂方式

(1) 如何理解Bean的装配?

bean的装配,即Bean对象的创建
1、默认装配方式---------构造方式
2、动态工厂bean

<?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">
	<!-- 注册工厂-->	
   	<bean id="serviceFactory" class="com.bjsxt.factory.ServiceFactory"></bean>
	<!-- 从工厂中获取SomeServiceImpl的bean对象 -->
	<bean id="someServiceImpl" factory-bean="serviceFactory" factory-method="getSomeService"></bean>
</beans>

3、静态工厂bean

<?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">
	<!-- 从静态工厂中获取SomeServiceImpl的bean对象 -->
	<bean id="someServiceImpl" class="com.bjsxt.factory.ServiceFactory" factory-method="getSomeService"></bean>
</beans>

7. Bean的作用域

Bean 的作用域
当在 Spring 中定义一个 bean 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声明 bean 的作用域的属性为 prototype。同理,如果你想让 Spring 在每次需要时都返回同一个bean实例,你应该声明 bean 的作用域的属性为 singleton。

Spring 框架支持以下五个作用域,分别为singleton、prototype、request、session和global session,5种作用域说明如下所示,

作用域描述
singleton在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值
prototype每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()
request每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
global-session一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境

注意,如果你使用 web-aware ApplicationContext 时,其中三个是可用的。

9.DI之设值注入1

(1)什么是DI?

依赖注入,所谓注入,可理解为对象的属性赋值

(2)DI大体几种实现方式?

设值注入 调用的get-set
1 简单数据类型和引用数据类型注入
2 集合属性注入(array、set、list、map、properties)
3 域属性自动注入(byName\byType;局部和全局配置)
4 空字符串或null的注入
2构造注入 调用的构造方法

9.DI之设值注入2

(1)该节课讲解了哪些集合属性的注入方式?

  array,set,list,map,propertise

(2)每种集合属性通过什么标签进行注入?

Array:array标签 Set:set标签 List:list标签
Map:map标签的entry标签的key和value属性
Propertise:props标签的prop标签的key和标签之间的文本内容

10.DI之设值注入3

(1)什么是域属性自动注入?

1、 no 这是默认设置,意味着它没有使用自动装配模式。你应该显示的使用bean引用来连接
2、byName由属性名自动装配。Spring 容器看到bean采用了自动装配byName模式(autowire=“byName”),然后根据它的属性在Spring容器中寻找与属性名相同bean进行关联 3、byType由属性的数据类型自动装配。Spring容器看到bean采用了自动装配的byType模式(autowire=“byType”),然后根据属性类型在Spring容器中寻找与属性类型相同bean进行关联。如果存在不止一个这样的bean,将抛出异常。
4、 constructor 类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生 autodetect Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配

(2)域属性自动注入byType方式有什么条件?

由属性的数据类型自动装配。Spring容器看到bean采用了自动装配的byType模式(autowire=“byType”),然后根据属性类型在Spring容器中寻找与属性类型相同bean进行关联。如果存在不止一个这样的bean,将抛出异常。

11.DI之设值注入4

(1)如何给属性注入空字符串?


使用空的value标签实现空字符串的注入。

(2)如何给属性注入null?


使用null标签实现空字符串的注入。

12.DI之构造注入

(1)构造注入底层通过什么方式进行注入的?

调用构造方法

(2)常见的构造注入方式有哪些?

1.使用name=“属性名”,value=“值”
2.使用index=“索引”,value=“值”
3.按照属性的严格顺序,进行赋值

13.DI之注解

(1)请描述本节课的注解有哪些,分别是什么作用?

@Component、声明这个类交给spring容器管理
@Value、 简单 数据类型使用@Value赋值
@Resource、引用类型通过@Resource也可以实现注入;默认情况下是byName方式注入。只有找不到与名称匹配的bean的时候才会按照类型来进行注入

@Autowired引用数据类型自动注入 默认byType /如果使用byName 方式注入需要与@Qualifier(“myPartner”)联合使用

(2)请描述@Autowired和@Resource的区别?

1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

3、@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

14.Bean相关常用注解

(1)本节课讲解了哪些Bean相关常用注解?

@Configuration :该注解添加在controller类上
@Service : 该注解添加在Service实现类上
@Repository:该注解添加在Dao实现类上

(2)@Scope常用的取值有哪些?

1)singleton (单一实例)
2)prototype

15.静态代理

(1)代理主要具有什么作用?

可以隐藏目标类的具体实现;
在不修改目标类代码的情况下能够对其功能进行增强。

(2)代理主要分为哪两类?

代理分为静态代理和动态代理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值