Spring IOC理解

beanfactory 是ioc容器的基本实现,是spring内部使用接口 面向spring本身 不提供给开发人员使用

applicationcontext是beanfactory的子接口,提供更多高级特性,面向spring的使用者,几乎所有场合都使用

applicationcontext而不是底层的beanfactory

applicationcontext 主要实现类 FileSystemXmlApplicationontext 用于项目打包 在别人电脑上运行时 获取容器

ClasspathXmlApplicationContext 自己使用这个类 获取ioc容器 在获取通过xml文件注入的bean对象。

获取方式:

Applicationcontext ac =new ClassPathXmlApplicationContext("xml文件名"); //获取ioc容器
 ac.getBean()//三种形式参数 得到对象

BeanFactory 简单粗暴,可以理解为 HashMap

  • Key - bean name

  • Value - bean object

但它一般只有 get, put 两个功能,所以称之为“低级容器”。

ApplicationContext 多了很多功能,因为它继承了多个接口,可称之为“高级容器”。在下文的搭建项目中,我们会使用它。

何为控制,控制的是什么?

答:是 bean 的创建、管理的权利,控制 bean 的整个生命周期。

何为反转,反转了什么?

答:把这个权利交给了 Spring 容器,而不是自己去控制,就是反转。由之前的自己主动创建对象,变成现在被动接收别人给我们的对象的过程,这就是反转。

举个生活中的例子,主动投资和被动投资。

自己炒股、选股票的人就是主动投资,主动权掌握在自己的手中;而买基金的人就是被动投资,把主动权交给了基金经理,除非你把这个基金卖了,否则具体选哪些投资产品都是基金经理决定的

何为注入,注入什么?

配置文件把资源从外部注入到内部,容器加载了外部的文件、对象、数据,然后把这些资源注入给程序内的对象,维护了程序内外对象之间的依赖关系。

所以说,控制反转是通过依赖注入实现的。但是你品,你细品,它们是有差别的,像是「从不同角度描述的同一件事」

  • IoC 是设计思想,DI 是具体的实现方式;

  • IoC 是理论,DI 是实践;

从而实现对象之间的解藕。

当然,IoC 也可以通过其他的方式来实现,而 DI 只是 Spring 的选择。

FactoryBean 和BeanFactory区别

  1. BeanFactory:负责生产和管理Bean的一个工厂接口,提供一个Spring Ioc容器规范,

  2. FactoryBean: 一种Bean创建的一种方式,对Bean的一种扩展。对于复杂的Bean对象初始化创建使用其可封装对象的创建细节。

2.依赖注入 DI

就是给声明的bean对象 赋值 一般有 setter方法 或者构造器

3.ioc通过bean标签中autowire属性设置自动装配策略

使用bytype实现自动装配 ioc容器中有且至于一个类型匹配的bean才能为属性赋值 找到多个会报异常 没有空指针

byname 一般用不到 在bytype找不到的情况下才会使用

4.注解 使用注解 什么componet server controlle reporsity 首先是对类就行标记 然后需要扫描 才能将这些类给ioc管理 在xml里 使用<context: componet-scan basepackge="" > 进行初始化扫描

4.aop

jdk动态代理 实现目标类的接口 利用一个类工厂 创建代理类

public class proxyFactory(){
  private Object target;
  public proxyFactory(Object tarage){
    this.tarage=tarage;
  }
public Object getProxy(){
  /**
  *classLoader loader :指定加载动态生成代理类的对象
  *class[] interfaces:获取目标对象的所有接口的class对象的数组
  *InvocationHandler h:执行器
  */
  //获取类加载器
  ClassLoader classLoader=this.getclass().getClassLoader();
     Class<?>[] classLoader=tarager.getclass().getInterfaces();
  InvocationHandler InvocationHandler=new InvocationHandler(){
    @Override
    public Object invoke(Object proxy,Method method,Object[] args){
      
    // 这里面执行核心方法
    Object result=method.incoke(tarage,args);
      return result;
    }
  }
  return Proxy.newProxyInstance(classLoader,classLoader,h);
 }
}

cglib动态代理 继承目标类

IOC:容器负责创建、配置和管理 bean,也就是它管理着 bean 的生命,控制着 bean 的依赖注入。

通俗点讲,因为项目中每次创建对象是很麻烦的,所以我们使用 Spring IoC 容器来管理这些对象,需要的时候你就直接用,不用管它是怎么来的、什么时候要销毁,只管用就好了。

IOC( IoC - Inversion of Control, 控制反转):四种类型注解

1.对象初始化:@Controller @Service @Reporsitory @Component

2.依赖注入 @Autowired spirng提供 @Qualifier(配合两者使用,找特定名字) @Resource jdk提供 先类型 后名字

3.作用域 @Scope(Singleton prototype request session globalsession)

4.生命周期 @PostConstruct @PreDestroy

5.xml的数据源 步骤

1.properties文件(配置root密码数据源信息)

2.xml 里面引入 properties文件 (<context:properties-placeholder location:="">)

3.xml 里面配置数据源信息 被ioc管理;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值