BeanFactory与FactoryBean及AOP

BeanFactory定义了Spring IoC容器,FactoryBean代表了一种模式,AOP增加了系统的灵活性。

BeanFactory

BeanFactory定义了IOC容器的基本行为与应遵守的基本规范,并负责管理对象的生命周期。获取IOC容器中的所有bean对象,可以通过ListableBeanFactory接口,

ListableBeanFactory接口的getBeanDefinitionNames()方法,可以获取当前Factory中的所有bean的名字,此接口的实现类会枚举所有bean实例。

如果使用了Spring Boot创建项目,可以在项目中引入Spring Boot Actuator,这个用于监控应用程序统计信息的组件,可以通过/beans这个端点(end point)获取到beans的完整列表。

FactoryBean

FactoryBean代表了一种模式,这种模式封装了对象的创建逻辑。如果想自定义创建对象的过程(或者对象的创建过程比较复杂),可以写一个类实现FactoryBean,在接口的实现方法中编写创建对象的代码,而这个手动创建的对象依然会被纳入spring的管理范围。

自从注解在spring中得到广泛应用,对于这种逻辑的实现就有了更简单的写法。具体参见spring提供的示例

AOP的概念

AOP是一种编程范例,旨在通过分离横切关注点来增强系统模块化。在不修改代码本身的基础上实现向现有代码添加行为。作为面向对象编程的一种补充,常用于处理一些具有横切性质的系统级服务。

AOP实现的关键在于AOP框架会自动创建的AOP代理,AOP代理则分为静态和动态两类,静态代理是使用AOP框架提供的命令进行编译(如:AspectJ),在编译阶段生成AOP代理类,被称为编译时增强。

动态代理在运行时借助于JDK动态代理、CGLIB等工具在内存中生成动态代理类,被称为运行时增强。 

Spring AOP

Spring的AOP代理由Spring的IoC容器负责生成、管理、调用。基于自定义annotation的Spring AOP应用

首先定义一个annotation,然后定义一个切面(Aspect),并在切面中定义一个通知(advice),最把切入点(pointcut)指向annotation,最后在目标方法上应用annotation。具体参见基于annotation配置的Spring AOP完整示例代码。 

Spring AOP应用范围

Authentication(权限),Caching(缓存)

Context passing(内容传递),Error handling(错误处理)

Lazy loading(懒加载),Debugging(调试)

logging, tracing, profiling and monitoring(记录跟踪 优化 校准)

Performance optimization(性能优化)

Persistence(持久化)、Resource pooling(资源池)、Synchronization(同步)、Transactions(事务)