总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
…
@Nullable
public T execute(PreparedStatementCreator psc, PreparedStatementCallback action) throws DataAccessException {
Assert.notNull(psc, “PreparedStatementCreator must not be null”);
Assert.notNull(action, “Callback object must not be null”);
if (this.logger.isDebugEnabled()) {
String sql = getSql(psc);
this.logger.debug(“Executing prepared SQL statement” + (sql != null ? " [" + sql + “]” : “”));
}
//固化流程1:获取connection
Connection con = DataSourceUtils.getConnection(this.obtainDataSource());
PreparedStatement ps = null;
Object var13;
try {
//固化流程2:获取PrepareStatement
ps = psc.createPreparedStatement(con);
this.applyStatementSettings(ps);
T result = action.doInPreparedStatement(ps);
this.handleWarnings((Statement)ps);
var13 = result;
} catch (SQLException var10) {
if (psc instanceof ParameterDisposer) {
((ParameterDisposer)psc).cleanupParameters();
}
String sql = getSql(psc);
psc = null;
//固化流程3:关闭Statement
JdbcUtils.closeStatement(ps);
ps = null;
//固化流程4:关闭Connection
DataSourceUtils.releaseConnection(con, this.getDataSource());
con = null;
throw this.translateException(“PreparedStatementCallback”, sql, var10);
} finally {
if (psc instanceof ParameterDisposer) {
((ParameterDisposer)psc).cleanupParameters();
}
JdbcUtils.closeStatement(ps);
DataSourceUtils.releaseConnection(con, this.getDataSource());
}
return var13;
}
…
}
我们都知道观察者模式在实际都工作中属于比较常用都设计模式。简单来说就是当一个对象当状态发生变化时,监视该对象的主体改变其行为的设计模式就是观察者模式。举个日常生活中的例子,比如你女朋友下班回家,我们就要观察女朋友的心情是怎样的。如果心情很好,那么我们可以放轻松各种开玩笑。如果女朋友心情不好,那就要谨言慎行,避免女朋友把上班的火撒在你自已身上。四个字来说就是要察言观色。
那么在Spring
中框架中是如何实现观察这模式的呢?我们来一起看下。在Spring
中观察者模式主要包含了三部分:Event
事件、Listener
监听者、Publisher
发送者。他们之间的关系可以参考下图来看,Event
事件对应女朋友的心情,Publisher
发送者对应你女朋友,Listener
监听者对应弱小的你。
有了以上对于观察者模式的理解,我们可以看下代码:
// Event事件
public class GFMoodEvent extends ApplicationEvent
{
private String message;
public GFMoodEvent(Object source, String message)
{
super(source);
}
public String getMessage() {
return this.message;
}
}
// Listener监听者
@Component
public class GFMoodListener implements ApplicationListener
{
@Override
public void onApplicationEvent(GFMoodEvent gFMoodEvent)
{
String message = gFMoodEvent.getMessage();
System.out.println(message);
}}
// Publisher发送者
@Component
public class GFMoodPublisher {
@Autowired
private ApplicationContext applicationContext;
public void publishEvent(GFMoodEvent gFMoodEvent) {
this.applicationContext.publishEvent(gFMoodEvent);
}
}
在传统的设计模式之中,观察者需要注册到被被观察者当中,这样才可以真正实现状态变化感知。那么在上述Spring
的观察者模式中,我们好像没有看到,观察者注册到哪里。那么实际上,我们的观察者是注册到了ApplicationContext
应用上下文中。ApplicationContext
是Spring
的顶级接口,负责提供应用启动、运行时的上下文信息。AbstractApplicationContext
是其具体的实现,对应的发布事件相关的代码如下所示:
public abstract class AbstractApplicationContext extends DefaultResourceLoader
implements ConfigurableApplicationContext {
…
@Override
public void publishEvent(ApplicationEvent event) {
publishEvent(event, null);
}
@Override
public void publishEvent(Object event) {
publishEvent(event, null);
}
protected void publishEvent(Object event, @Nullable ResolvableType eventType) {
Assert.notNull(event, “Event must not be null”);
// Decorate event as an ApplicationEvent if necessary
ApplicationEvent applicationEvent;
读者福利
分享一份自己整理好的Java面试手册,还有一些面试题pdf
不要停下自己学习的脚步
下自己学习的脚步**
[外链图片转存中…(img-JwqVUypM-1714884600047)]
[外链图片转存中…(img-kKlzdVPy-1714884600048)]