Spring详细讲解FactoryBean接口的使用

网友投稿 330 2022-07-25


目录一、基本使用二、高级使用

FactoryBean是一个接口,创建对象的过程使用了工厂模式。

一、基本使用

让Spring容器通过FactoryBean来实现对象的创建。

创建FactoryBean案例

public class SimpleFactoryBean implements FactoryBean {

@Override

public Cat getObject() throws Exception {

// 创建Cat对象并且返回

return new Cat("Tom");

}

@Override

public Class> getObjectType() {

return Cat.class;

}

}

其实这里就相当于在配置文件里创建了一个bean标签。

需要加载的类

public class Cat {

String name;

public Cat(String name) {

this.name = name;

}

}

启动类里面创建方法加载Bean

@SpringBootApplication

public class SpringbootApplication {

public static void main(String[] args) {

ConfigurableApplicationContext run = SpringApplication.run(SpringbootApplication.class, args);

}

// 等价于配置文件配置

@Bean

public SimpleFactoryBean catFactoryBean() {

return new SimpleFactoryBean();

}

}

二、高级使用

让Spring容器通过FactoryBean创建指定接口的动态代理对象。

创建FactoryBean,可以生成任意接口的动态代理对象

创建一个接口

public interface MyUserMapper {

void select();

}

创建一个FactoryBean实现类

可以通过传入接口的全类名,创建动态代理对象。

public class MapperFactoryBean implements FactoryBean {

/**

* 用于保存接口的全类名

*/

private String className;

public MapperFactoryBean(String className) {

this.className = className;

}

@Override

public Object getObject() throws Exception {

Class> interfaceClass = Class.forName(className);

// 生成动态代理对象返回

Object proxyInstance = Proxy.newProxyInstance(Mahttp://pperFactoryBean.class.getClassLoader(), new Class[]{interfaceClass}, new InvocationHandler() {

@Override

public Object invoke(Object o, Method method, Object[] objects) throws Throwable {

// 获取当前方法名

System.out.println(method.getName());

if ("select".equals((method.getName()))) {

System.out.println(className + "动态代理对象的select方法被执行了!!");

}

return null;

}

});

return proxyInstance;

}

@Override

public Class> getObjectType() {

try {

Class> interfaceCLass = Class.forName(className);

return interfaceCLass;

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

return null;

}

}

启动类里面创建方法加载Bean

@SpringBootApplication

public class SpringbootApplication {

public static void main(String[] args) {

ConfigurableApplicationContext run = SpringApplication.run(SpringbootApplication.class, args);

run.getBean(MyUserMapper.class);

}

// 等价于配置文件配置

@Bean

public MapperFactoryBean mapperFactoryBean() {

return new MapperFactoryBean("com.test.registrar.MyUserMapper");

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot详细探究讲解默认组件扫描
下一篇:Spring Boot 使用 Disruptor 做内部高性能消息队列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~