Java设计模式之外观模式示例详解
356
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~