spring小知识点的理解

spring中的Bean的作用域

在spring1.X的版本时只有两个作用域:singleton和protetype。singleton作用域是每一次取出的Bean都是同一个,是单例的。而prototype每一次取出的Bean都是一个新的实例,是原型的。

在spring2.X的版本中由新增了三个作用域:request、session、globalSession。request域是每一次请求都是创建一个Bean。session域是同一个HttpSession共享同一个Bean。globalSession是同一个全局session共享同一个Bean。

Ioc和DI

我的理解是这两个概念其实没太大区别,Ioc(Inversion of control)控制反转,我们传统创建对象是直接通过代码创建一个对象,而控制反转是通过容器来装配管理对象。DI是依赖注入,其实就是为容器中对象的成员变量赋值,类A中有个成员变是类B,在程序运行时,DI会动态的将这种依赖关系注入到类A中,XML配置文件注入的方式可以通过构造方法或者是set方法进行注入,如果使用注解可以使用@AutoWired和@Resource

自动装配

我理解的是和依赖注入差不多,也都是为成员变量赋值。在Xml配置文件中有五种方式:

<bean id="" class="" autowire="no"> </bean>
<bean id="" class="" autowire="byName"> </bean>
<bean id="" class="" autowire="byType"> </bean>
<bean id="" class="" autowire="constructor"> </bean>
<bean id="" class="" autowire="default"> </bean>

BeanFactory和ApplicationContext

BeanFactory比较古老,不支持AOP、Web等功能。这就遍有了ApplicationContext,它是BeanFactory的子类。
如果使用ApplicationContext,并配置的Bean是singleton那么这个Bean就会被实例化,即使不使用也会实例化,可以预先加载,但是浪费内存。
而BeanFactory正好相反,它不会事先实例化,而是会在要使用的时候再实例化,好处是节约内存,但是速度比较慢。

IOC的原理

  • ioc会先创建一个java类对象用来存放Bean的配置。
  • 然后使用一些xml解析技术解析bean的配置,存入第一点提到的的类中
  • 使用HashMap对这个对象进行存储
  • 再遍历存放这个HashMap集合,依次取出java类对象
  • 获取bean的配置信息,然后在利用反射实例化对象,将实例化后的对象存入另一Map集合中

@Autowired与@Resource

@Autowired只能通过类型来进行注入,如果想通过bean的名字来进行注入就需要配合@Qualifier一起使用
@Resource默认会按照bean的名字来进行注入,但它也可以按照类型来进行注入

AOP的理解

Aspect Oriented Programming 面向切面编程。它的作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强。底层实现是通过spring提供的动态代理技术实现的,在程序运行时,spring通过动态代理技术,动态生成代理对象,代理对象调用目标方法时,进行一些功能增强。

AOP相关概念

Spring的AOP实现底层就是对传统的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。

  • Target(目标对象):代理的目标对象
  • Proxy(代理):代理类
  • Joinpoint(连接点):可以被增强的方法叫连接点。是指哪些被连接到的方法,spring中,点指的就是方法,我们需要连接到一个方法,然后再去对这个方法增强。
  • Pointcut(切入点):那些真正要被增强的方法叫切入点
  • Advice(通知/增强):我们要对某个方法进行增强,这个增强逻辑我们放在一个方法中,这个方法就是通知。
  • Aspect(切面):就是切入点+通知
  • Weaving(织入):就是切入点和通知结合的过程

就比如一个接口中有很多抽象方法,这些抽象方法都是连接点,我们要对其中一个方法进行增强,这个方法就是切入点,增强的逻辑叫通知,这个方法和增强逻辑就是切面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值