当前位置: 代码迷 >> 综合 >> Sping BeanFactory FactoryBean AOP IOC DI之间的内在联系
  详细解决方案

Sping BeanFactory FactoryBean AOP IOC DI之间的内在联系

热度:44   发布时间:2023-12-09 01:36:43.0

一. Spring的两个核心接口:BeanFactory和FactoryBean介绍

1.  BeanFactory和IOC之间的关系

BeanFactory是Spring的bean工厂,主要负责管理Spring的bean的声明周期。原始java对象的管理是我们自己在管理的在类中或方法中声明、实例化的,这种方式使类以及对象之间的耦合性大大增加。此时引入Spring框架帮助我们管理Bean,就是说把声明和创建以及Bean的生命周期管理都交给了Spring容器不管理,这个也就是我们所说的反转控制也叫做控制反转。BeanFactory就是Spring为我们提供的IOC容器的顶级接口,此外Spring还未我们提供了接口的实现,以便更方面在企业开发中使用。实现的常用接口有ApplicationContext、WebApplicationContext、ClassPathXmlApplicationContext等等。

在IOC控制反转中,假如说我们调用的UserService层引入了UserDao层的接口就是说service层依赖dao层,而spring又是负责管理这些Bean的此时由引入了另外一个概念DI:依赖注入。这样就容易理解IOC和DI以及BeanFactory之间的关系了。

DI依赖注入,Spring为我们提供了两种操作的方式

方式一:配置实现,在xml文件中通过构造函数或者访问其方法来实现依赖注入;

方式二:通过注解的方式来实现,注解有分为Autowired和Resource两种方式。值得说的是Autowired是Spring给我们提供的默认是按照类型注入的,如果想要使用名字来注入需要引入Qualifier来实现。Resource是属于JDK的这个默认是按照名称实现的,如果需要制定名称可以通过name属性进行设置。

需要注意的是Autowired在装在一个类有多个实例的对象时,如果不结合Qualifier名称制定他是无法确定装在哪一个实例的。此时会报错BeanCreateException<好像是>。如果要减少对Spring的依赖可以使用Resource来实现。

2. FactoryBean和AOP之间的关系

AOP面向切面编程。相对于面向对象编程AOP更加灵活,如果说面向对象时面向“静止”对象编程的话、AOP可以理解为面向对象向"活动"对象编程。AOP主要包含两个:切点和通知。通知就是我们要做的增强,比如说统计方法运行时间或者是记录日志。切点就是我们具体要针对的哪一类或哪一个方法进行增强。有了切点和通知就需要我们动态的对方法增强了,Spring默认使用的JDK动态代理来实现的AOP代理增强也集成提供了Cglib的字节码代理方式。

Spting为我们提供了ProxyFactoryBean这个类,负责Bean的代理实现。这个类就是继承自FactoryBean接口。FactoryBean是Spring为我们提供的一种工厂Bean的实现方式。我们普通的javaBean也可以配置成FactoryBean,此时需要说的是需要制定factory方法。

我对他们之间的关系理解,基本上是这样的。如果有说的不对的地方请不惜赐教。

  相关解决方案