Spring详细讲解FactoryBean接口的使用
FactoryBean是一个接口,创建对象的过程使用了工厂模式。
一、基本使用
让Spring容器通过FactoryBean来实现对象的创建。
🔶 创建FactoryBean案例
public class SimpleFactoryBean implements FactoryBean<Cat> { @Override public Cat getObject() throws Exception { // 创建Cat对象并且返回 return new Cat("Tom"); } @Override public Class<?> getObjectType() { return Cat.class; } }
其实这里就相当于在配置文件里创建了一个bean标签。
<bean class="com.text.registrar.SimpleFactoryBean" id="cat"></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(MapperFactoryBean.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"); } }
到此这篇关于Spring详细讲解FactoryBean接口的使用的文章就介绍到这了,更多相关Spring FactoryBean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
idea运行java项目main方法报build failure错误的解决方法
当在使用 IntelliJ IDEA 运行 Java 项目的 main 方法时遇到 "Build Failure" 错误,这通常意味着在项目的构建过程中遇到了问题,以下是一些详细的解决步骤,以及一个简单的代码示例,用于展示如何确保 Java 程序可以成功构建和运行,需要的朋友可以参考下2024-09-09springboot AutoConfigureAfter控制Bean的注入顺序方法详解
这个文章主要介绍一下@AutoConfigureAfter在spring框架中的作用,在使用过程中,很多开发人员在使用它的时候都出现了问题,问题比较多的就是它们的注册顺序总不是我们预期的,下面介绍一下正常的使用方法,感兴趣的朋友一起看看吧2024-05-05@MapperScan和@ComponentScan一块使用导致冲突的解决
这篇文章主要介绍了@MapperScan和@ComponentScan一块使用导致冲突的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
最新评论