Spring理解再复

IOC

怎么简便理解IOC
IOC(Inversion of Control):传统获取资源的方式是组件请求容器查找并批复获取容器的资源,这是很惯性的理解,而IOC则是反过来,是容器自己(这里是Spring)主动把资源给组件(比如一些使用setter方法注入值的文件),Spring就像谷歌浏览器的插件管理器,要什么服务我用一个bean(就像插件)注入就行。

BeanFactory和ApplicationContext:

  • 本身区别:

BeanFactory是底层接口,ApplicationContext,应用上下文,继承BeanFactory接口,比BF具有更多功能

  • 装载Bean区别:
    BeanFactory只有在从容器中取bean的时候才会实例化一个bean,而ApplicationContext会在启动的时候就把所有的Bean全部实例化了,适合Web应用。

FactoryBean和BeanFactory:
Spring里面有两种Bean,普通的和工厂Bean(FactoryBean),
BeanFactory生产Bean,FactoryBean根据某个Bean的id获取某个Bean的对象(Bean对应的实体类对象)

自动装配

  1. autowireByName
    比如有三个类,Address.java和Car.java和Person.java,Person类里面包含Address和Car两个类对象address、car;在Spring里面就可以这样配置bean,三个bean的id,address,car,person,主要是前面address,car不能用其他的,因为他们的id跟Person里的对象成员一样,会自动把address,car的内容自动装入person里面。
  2. autowireByType
    还是上面三个bean,只要三个bean是唯一的,一个类对应的bean唯一,即便bean的id没有也没关系,只要声明bean是bytype就会根据类路径来装配

Bean作用域

  • 单例Bean,默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实例, 整个 IOC 容器范围内
    都能共享该实例:所有后续的 getBean() 调用和 Bean 引用都将返回这个唯一的 Bean 实例.该作用
    域被称为 singleton, 它是所有 Bean 的默认作用域
    比如,
Car car = (Car) ctx.getBean("car");
Car car2 = (Car) ctx.getBean("car");
System.out.println("car == car2--》" + (car == car2));
//输出true,getBean()返回的都是同一个对象
  • 原型Bean,当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会
    导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)
    时都会创建一个新的bean实例。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是
    当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。根据经验
    ,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域
Car car = (Car) ctx.getBean("car2");
Car car2 = (Car) ctx.getBean("car2");
System.out.println("car == car2--》" + (car == car2));
//输出false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值