很多框架都有类似的接口
1.接口 1
public interface RichFunction{
void open(Configuration parameters) throws Exception;
void close() throws Exception;
}
2.抽象类
public abstract class AbstractRichFunction implements RichFunction{
@Override
public void open(Configuration parameters) throws Exception {}
@Override
public void close() throws Exception {}
}
3.接口 2
public interface SinkFunction<IN>{
default void invoke(IN value, SinkFunction.Context context) throws Exception {
this.invoke(value);
}
}
4.定义抽象类 2
public abstract class RichSinkFunction<IN> extends AbstractRichFunction implements SinkFunction<IN> {
private static final long serialVersionUID = 1L;
public RichSinkFunction() {
}
}
引用抽象类 2 的时候,如果重写了 open 和 close 方法,那么执行 invoke 方法前会先调用 open ,执行结束后执行 close ,请问下这是怎么做到的呢?
new RichSinkFunction<Tuple2<String, Integer>>() {
private static final long serialVersionUID = -6063998106426201742L;
private transient SqlSession sqlSession;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
sqlSession = MybatisSessionFactory.getSqlSessionFactory().openSession();
}
@Override
public void invoke(Tuple2<String, Integer> value) throws Exception{
try{
//do something
sqlSession.commit();
}
catch (Throwable e){
sqlSession.rollback();
e.printStackTrace();
}
}
@Override
public void close() throws Exception {
sqlSession.close();
super.close();
}
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.