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)代理主要分为哪两类?
代理分为静态代理和动态代理