目录
2.3 Spring 支持 bean 的作用域有几种吗? 每种作用域是什么样的?(必会)
2.6 你知道的 Spring 的通知类型有哪些,分别在什么时候执行?(了解)
2.3 Spring 支持 bean 的作用域有几种吗? 每种作用域是什么样的?(必会)
Spring 支持如下 5 种作用域:
(1) singleton:默认作用域,单例 bean,每个容器中只有一个 bean 的实例。
(2) prototype:每次请求都会为 bean 创建实例。
(3)request:为每一个 request 请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。
(4)session:与 request 范围类似,同一个 session 会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在 global-session 中。
2.5 Spring 框架中都用到了哪些设计模式?(必会)
1. 工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例
2. 单例模式:Bean 默认为单例模式
3. 代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术
4. 模板方法:用来解决代码重复的问题。比如 . RestTemplate, JmsTemplate,JpaTemplate
5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所 有 依 赖 于 它 的 对 象 都 会 得 到 通 知 被 制 动 更 新 , 如 Spring 中 listener 的 实 现--ApplicationListener
2.6 你知道的 Spring 的通知类型有哪些,分别在什么时候执行?(了解)
Spring 的通知类型有四种,分别为:
前置通知[]before]:在切点运行之前执行
后置通知[after-returning]:在切点正常结束之后执行异常通知[after-throwing]:在切点发生异常的时候执行最终通知[after]:在切点的最终执行
Spring 还有一种特殊的通知,叫做环绕通知:around
Spring 依赖注入:按注解注入
Spring和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component。
1.@Autowired是自动注入,自动从spring的上下文找到合适的bean来注入
@Autowired(required=true)表示必须找到匹配的Bean,否则将报异常。
@Autowired默认按类型匹配注入Bean
在Spring中,@Autowired注入的类型可以是接口
2.@Resource要求提供一个Bean名称的属性,如果属性为空,自动采用标注处的变量名和方法名作为Bean的名称 。
@Resource默认按名称匹配注入Bean
比如,在Controller层中注入Service,名称为Service的实现类,如下示
@Resource(name = "userServiceImpl") private UserService userService;
3.@Qualifier 指定注入bean的名称
比如,在Controller层中注入Service,名称为Service的实现类,如下示
@Autowired @Qualifier("userServiceImp") private UserSerevice userService
4.@Service,@Controller,@Repository分别标记类是Service层,Controller层,Dao层的类,spring扫描注解配置时,会标记这些类要生成bean。
@Repository用于标注数据访问组件,即DAO组件
@Service,@Controller 这些注解要放在接口的实现类上,而不是接口上面。
5.@Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。
6.@Scope用于指定Bean的作用范围
7.@Autowired和@Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。
而@Service,@Controller,@Repository,@Component则是用来修饰类,标记这些类要生成bean。