傻大方


首页 > 潮·科技 > >

理解透彻!BeanFactory与FactoryBean分析( 二 )



按关键词阅读:

方法介绍: 1、 getobject ()方法会返回该FactoryBean “生产” 的对象实例,我们需要实现该方法以给出自己的对象实例化逻辑; 2、 getobjectTYype ()方法仅返回getobject ()方法所返回的对象的类型,如果预先无法确定,则返回null; 特别注意这个方法主要作用是:该方法返回的类型是在ioc容器中getbean所匹配的类型 , 也就是说ioc中有很多类型的bean , 要找到这个bean就是通过getobjectTYype ()方法的返回值类型!好吧 , 我举个例子
public class XXX implements FactoryBean {@Overridepublic Object getObject() throws Exception {return new YYY;}@Overridepublic Class getObjectType() {//注意这个方法主要作用是:该方法返回的类型是在ioc容器中getbean所匹配的类型return AAA.class;}}那么要想在ioc中找到XXX这个类的bean(实际上是YYY), 在getbean的时候写法如下public class Demo1 {public static void main(String[] args) {AnnotationConfigApplicationContext annotationConfigApplicationContext =new AnnotationConfigApplicationContext(Appconfig.class);annotationConfigApplicationContext.getBean( AAA.class ); // 【注意这里是AAA.class】}}3、 isSingleton ()方法返回结果用于表明,工厂方法(getobject ())所“生产”的对象是否要以singleton形式存在于容器中 。 如果以singleton形式存在,则返回true,否则返回false;
FactoryBean表现的是一个工厂的职责 。即一个Bean A如果实现了FactoryBean接口 , 那么A就变成了一个工厂 , 根据A的名称获取到的实际上是工厂调用getObject()返回的对象 , 而不是A本身 , 如果要获取工厂A自身的实例 , 那么需要在名称前面加上'}@Overridepublic Class getObjectType() {//注意这个方法主要作用是:该方法返回的类型是在ioc容器中getbean所匹配的类型return StudentBean.class;}//一个学生学习方法public void study(){System.out.println("学生学习 。。。 ");}}3、再创建一个TeacherBean类
public class TeacherBean {public void teacher(){System.out.println("老师教书 。。。。 ");}}4、测试StudentBean类型
public class Demo1 {public static void main(String[] args) {AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(Appconfig.class);StudentBean studentBean = (StudentBean)annotationConfigApplicationContext.getBean("studentBean");studentBean.study();}}理解透彻!BeanFactory与FactoryBean分析文章插图
加上“//加上了“studentBean.study();}}理解透彻!BeanFactory与FactoryBean分析文章插图
运行成功
5、测试一下teacherBean类型
public class Demo1 {public static void main(String[] args) {AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(Appconfig.class);TeacherBean teacherBean = (TeacherBean) annotationConfigApplicationContext.getBean("studentBean");teacherBean.teacher();}}运行成功
理解透彻!BeanFactory与FactoryBean分析文章插图
2.4 FactoryBean使用场景使用场景一: FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象 。我们知道AOP实际上是Spring在运行时创建了一个代理对象 , 也就是说这个对象 , 是我们在运行时创建的 , 而不是一开始就定义好的 , 这很符合工厂方法模式 。 更形象地说 , AOP代理对象通过Java的反射机制 , 在运行时创建了一个代理对象 , 在代理对象的目标方法中根据业务要求织入了相应的方法 。 这个对象在Spring中就是——ProxyFactoryBean 。
所以 , FactoryBean为我们实例化Bean提供了一个更为灵活的方式 , 我们可以通过FactoryBean创建出更为复杂的Bean实例 。
当然在spring中 , Spring容器内部许多地方了使用FactoryBean 。 下面是一些比较常见的FactoryBean实现:
JndiobjectFactoryBean
LocalSessionFactoryBean SqlMapClientFactoryBean ProxyFactoryBean TransactionProxyFactoryBean
使用场景二: Mybatis中的SqlSessionFactoryBean
package org.mybatis.spring;public class SqlSessionFactoryBean implements FactoryBean, InitializingBean, ApplicationListener {private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class);......}另外提一下 , 阿里开源的分布式服务框架 Dubbo中的Consumer 也使用到了FactoryBean ,


稿源:(未知)

【傻大方】网址:http://www.shadafang.com/c/111J2La2020.html

标题:理解透彻!BeanFactory与FactoryBean分析( 二 )


上一篇:续航|iPhone 12 Pro Max玩三个小时游戏就没电?

下一篇:品牌在2013|荣耀手机历年市场表现解析:稳中前进未来还会更精彩