写过JAVA代码的人一定知道,数据库连接忘记关闭会带给系统致命错误。
尤其访问量很大的时候,所有数据库对连接的支撑都是有限的,当打开的连接到了一定数目,
服务器就完蛋了。
所以我们就要求程序员写代码的时候一定要关闭连接,使用
Connection con = null;
try{
//创建连接,执行SQL
}catch(SQLException ex){
....
}finally{
if ( con != null ){
try{
con.close();
}catch(SQLException ex1){
.....
}
}
}
来保证每次都能把连接关闭,但是程序员每次输入这段代码,是很累人的事情。常在河边走,哪有不湿鞋的。
还有一种好的办法,可以减少这种无聊的输入,就是使用JBULDER里面的模版,定义一个模版,起一个名字。两三下就可以把一段代码输入。但是代码看着很臃肿,而且万一这种逻辑变化了怎么办。于是有了一种更好的办法,使用模版模式。
定义一个模版类
public class ConTemplate{
//具体SQL逻辑
protected abstract void doExcecute(Connection con) throws SQLException;
public void excecute(){
Connection con = null;
try{
//创建连接,执行SQL
doExcecute(con);
}catch(SQLException ex){
....
}finally{
if ( con != null ){
try{
con.close();
}catch(SQLException ex1){
.....
}
}
}
}
}
有了这个模版,我们就没有必要在业务逻辑里面创建和关闭连接了。
例如一个方法add
public void add(Object obj){
//内部匿名类
ConTemplate temp = new ConTemplate(){
protected abstract void doExcecute(Connection con) throws SQLException{
//SQL逻辑
}
};
temp.excecute();
}
代码是可以清晰了一些。但是代码里得写难以阅读的匿名类。
除了这个,有没有更好的办法呢?
这个答案是Spring的拦截器和过滤器。
过滤器和拦截器从根上避免了连接不关闭的问题。我们不用在提心吊胆地害怕连接没有关闭。
架构就有点类似一个桥梁定制的一个主梁,只要主梁质量没有问题上面附带的东西出点问题,不影响整个桥梁。
但是不使用架构,就好像每一段代码都是主梁的一部分,一节出问题,整个就完了。