source: http://blog.csdn.net/xiongzk/article/details/8102946
最近在一个加密应用中有如下一行代码:
Security.addProvider(new com.sun.crypto.provider.SunJCE());
一看就知道,这用的是SUN JDK 的类。很明显的问题是,如果移植都IBM的JDK上,是编译不过的。当然我们也可以针对IBM的JDK做一个版本,把上面的代码改成如下:
Security.addProvider(new com.ibm.crypto.provider.IBMJCE());
这样确实可以解决移植的问题,但是只为一行代码的差异就做一个新的版本,有点小题大做了。而且这样做的代价是在你以后的开发维护中要同时对两个版本做修改,工作量相当于是增加了一倍。其实我们可以把上面的代码合成如下:
String jdkvs=System.getProperty( "java.vm.vendor");//
if(null!=jdkvs && jdkvs.startsWith("IBM")){
try {
Security.addProvider((Provider)Class.forName("com.ibm.crypto.provider.IBMJCE").newInstance());
} catch (IllegalAccessException e) {
/ / TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try {
Security.addProvider((Provider)Class.forName("com.sun.crypto.provider.SunJCE").newInstance());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}