J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)。
默认情况下,Sun 编译器以简单的两行的形式输出警告。通过添加 -Xlint:keyword 标记(例如 -Xlint:finally),您可以获得关键字类型错误的完整说明。通过在关键字前面添加一个破折号,写为 -Xlint:-keyword,您可以取消警告。(-Xlint 支持的关键字的完整列表可以在 javac 文档页面上找到。)
关键字 用途
deprecation 使用了不赞成使用的类或方法时的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path 在类路径、源文件路径等中有不存在的路径时的警告。
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。
finally 任何 finally 子句不能正常完成时的警告。
all 关于以上所有情况的警告。
@SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。
@SuppressWarnings 批注接收一个 "value" 变量,该变量是一个字符串数组,它指示将取消的警告。合法字符串的集合随编译器而变化,但在 JDK 上,可以传递给 -Xlint 的是相同的关键字集合(非常方便)。并且要求编译器忽略任何它们不能识别的关键字,这在您使用一些不同的编译器时非常方便。
因为 @SuppressWarnings 批注仅接收一个参数,并为该参数使用了特殊的名称 "value",所以您可以选择省略 value=,作为一种方便的缩写:
public class DeprecatedUser2 {
@SuppressWarnings({"deprecation"})
public static void main(String[] args) {
DeprecatedExample2.foo();
}
}
您可以将单个数组参数中的任意数量的字符串值传递给批注,并在任何级别上放置批注。例如,以下示例代码指示将取消整个类的 deprecation 警告,而仅在 main() 方法代码内取消 unchecked 和 fallthrough 警告:
import java.util.*;
@SuppressWarnings({"deprecation"})
public class NonGenerics {
@SuppressWarnings({"unchecked","fallthrough"})
public static void main(String[] args) {
Runtime.runFinalizersOnExit();
List list = new ArrayList();
list.add("foo");
}
public static void foo() {
List list = new ArrayList();
list.add("foo");
}
}
@SuppressWarnings 是否比前两个批注更有用?绝对是这样。不过,在 JDK 1.5.0 版本中还没有完全支持该批注,如果您用 1.5.0 来尝试它,那么它将类似无操作指令。调用 -Xlint:-deprecation 也没有任何效果。Sun 没有声明什么时候将增加支持,但它暗示这将在即将推出的一个 dot 版本中实现。
更进一步
如果您试图在 Javadocs 页面中查看这些属性,那么您可能很难找到它们。它们位于核心的 java.lang 包中,但有点隐蔽,它们出现在 Javadoc 类的最底端,列在 Exceptions 和 Errors 后面。
注意到了附加在 SuppressWarnings 批注后面的陌生的批注 @Target 和 @Retention 了吗?这些称为元数据批注,它们描述了该批注在哪里适用。我将在本系列的第二篇文章中介绍它们,以及介绍如何将元数据批注应用到您自己的批注中。
----------------------------------------------------------------
spring 事务注解
默认遇到throw new RuntimeException("...");会回滚
需要捕获的throw new Exception("...");不会回滚
// 指定回滚
@Transactional(rollbackFor=Exception.class)
public void methodName() {
// 不会回滚
throw new Exception("...");
}
//指定不回滚
@Transactional(noRollbackFor=Exception.class)
public ItimDaoImpl getItemDaoImpl() {
// 会回滚
throw new RuntimeException("注释");
}
// 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.REQUIRED)
// 容器不为这个方法开启事务
@Transactional(propagation=Propagation.NOT_SUPPORTED)
// 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
// 必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.MANDATORY)
// 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.NEVER)
// 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
@Transactional(propagation=Propagation.SUPPORTS)
/*
public void methodName(){
// 本类的修改方法 1
update();
// 调用其他类的修改方法
otherBean.update();
// 本类的修改方法 2
update();
}
other失败了不会影响 本类的修改提交成功
本类update的失败,other也失败
*/
@Transactional(propagation=Propagation.NESTED)
// readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,readOnly=true)
// 设置超时时间
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 设置数据库隔离级别
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)
例子:
/***
* 上传笔试成绩
* @gbf
* import org.springframework.transaction.annotation.Transactional;
* 引入工具类
*/
@SuppressWarnings("deprecation")
@Transactional(rollbackFor = Exception.class)
public void upload(){
try {
HttpServletResponse resp = ServletActionContext.getResponse();
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charest=UTF-8");
sysSetVO = (SysSetVO) ActionContext.getContext().getSession().getConstant.SESSION_ACTOR_KEY);
String filepath="";
if(file!=null){
filepath=new UploadAction().upLoadFile(file,"signupBS",fileFileName);
}
System.out.println("校验开始");
String path = ServletActionContext.getRequest().getContextPath();
String addr = ServletActionContext.getRequest().getRemoteAddr();
String port = ServletActionContext.getRequest().getServerPort()+"";
URL url = new URL("http://"+addr+":"+port+path+"/"+filepath);
URLConnection conn = url.openConnection();
HSSFWorkbook workbook = new HSSFWorkbook(conn.getInputStream());
HSSFSheet sheet = workbook.getSheetAt(0);
int r = sheet.getLastRowNum();
//下面开始验证数据格式
for (int i = 2; i <= r; i++) {
HSSFRow row = sheet.getRow(i);
//准考证号
HSSFCell cell0 = row.getCell((short) 1);
String zkzcode = cell0.getStringCellValue();
//判断该准考证号是否存在
int cnt=0;
cnt=this.signUpService.checkZkzCodeExist(zkzcode);
if(cnt==0){
throw new Exception();
}
//笔试成绩
HSSFCell cell1 = row.getCell((short) 6);
//String bscj = cell1.getStringCellValue();
Double db = cell1.getNumericCellValue();
BigDecimal bd = new BigDecimal(db);
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
//修改数据
SignUpVO signUpVO1 = new SignUpVO();
signUpVO1.setBscj(bd+"");
signUpVO1.setZkzcode(zkzcode);
this.signUpService.updateBscj(signUpVO1);
}
resp.getWriter().print("true");
} catch (Exception e) {
e.printStackTrace();
}
}
相关推荐
- Spring Boot支持声明式事务管理,可以在方法上添加@Transactional注解,确保在出现异常时能回滚事务,保持数据的一致性。 4. **性能优化**: - 对于大量数据,可以采用流式处理方式,避免一次性加载所有数据到...
7. **数据迁移与升级**:了解数据泵(Data Pump)工具用于数据导入导出,以及数据库升级和迁移的步骤和策略。 8. **集群技术**:如果涉及047(可能与RAC相关),则需理解Oracle Real Application Clusters(RAC)的...
- **注解文本**:提供额外的信息或说明。 #### 产品配置管理概念 产品配置管理涉及对产品及其各个版本进行管理的过程,确保可以准确追踪和控制产品的不同配置。 - **成品配置**:指产品的一个特定版本,即一组...
9. **API集成**:可能提供API接口,允许与其他系统或服务(如CRM、数据分析平台等)集成,实现数据的导入导出。 这个“通用数据工具”可能对数据分析师、研究人员、教育工作者、项目经理或任何需要处理和协作多种...
它支持读取、处理和写入大量数据,适合于离线、大数据量的场景,如数据库的导入导出、数据清洗和转换等。 2. **项目结构** 在这个"spring batch demo"中,项目通常会包含以下关键部分: - `src/main/resources`: ...
4. 成绩管理:记录和查询学生的考试成绩,支持批量导入和导出。 5. 教学计划:制定学期的教学计划,包括课程安排、考试时间表等。 6. 考勤管理:记录学生的出勤情况,支持统计分析。 7. 用户权限管理:根据角色分配...
Dbunit是一款强大的Java库,它扩展了JUnit,为数据库提供了结构化数据的导入和导出,使得测试更加方便和可靠。下面将详细介绍如何在Spring中使用Dbunit进行Dao的集成单元测试。 首先,我们需要理解集成测试的概念。...
3. **导入Hibernate库**:在项目导航器中,右键点击“WEB-INF” > “Libraries”,选择“Add External JARs”,找到你的Hibernate库文件(如hibernate-core.jar,hibernate-entitymanager.jar等),将其导入到项目中...
- **数据备份**:如何导出数据库文件进行备份,以及如何在需要时导入恢复数据。 12. **安全性**: - **数据加密**:ObjectBox允许对数据库进行加密,保护用户数据的安全。 通过研究这个"objectbox-examples...
Bundle包含了一组相关的类和资源,它们通过声明导出和导入包来互相通信。这种模块化的结构使得开发者能够独立地开发、测试和部署每个模块,提高了代码的重用性和可维护性。 Blueprint XML配置文件在OSGi环境中定义...
8. DTS(Data Transformation Services)是SQL Server中用于数据导入导出、转换和分发的服务。 9. 事务是数据库操作的基本单元,具有原子性,要么全部执行,要么全部回滚。 10. SQL Server中的约束类型包括非空...
在进行数据迁移或数据导出导入时,MyBatis 的灵活性能够很好地支持这些需求。 3. **报表系统** 报表系统通常需要复杂的 SQL 查询,MyBatis 的动态 SQL 特性非常适合这种场景。 4. **微服务架构** 在微服务...
无需修改XML读写分离,事务内操作强制读主库基于注解自动缓存管理(所有查询方法结果自动缓存、自动更新,事务回滚缓存同步回滚机制)自动缓存实现基于jeesuite-cache和spring-data-redis分页组件敏感操作拦截...
继承Spring的`@RunWith(SpringRunner.class)`注解,声明`@SpringBootTest`或`@DataJpaTest`注解来启动Spring容器,并利用`@Transactional`注解确保每次测试都在独立的事务中运行,测试结束后自动回滚,避免影响其他...
DBUnit提供了数据导入/导出功能,以及一系列的数据操作方法,如INSERT、UPDATE、DELETE等。它支持多种数据库格式,包括CSV、XML和Excel,使得数据的准备和验证变得简单易行。在Spring框架中整合DBUnit,可以利用...
在非Web环境中,Spring Batch常用于数据修复,如更新错误数据、批量导入导出等。 2. **JDBC模板**: Spring JDBC模块提供了一个抽象层,简化了对Java数据库连接(JDBC)的使用。在数据修复场景下,可以使用...
它提供了一种方法来导入和导出数据库数据,通常是在测试前后加载和清理数据。DBUnit支持多种数据格式,如XML、CSV、YAML等,可以方便地定义测试数据集。 3. **集成Spring与DBUnit**:在Spring项目中使用DBUnit,...