標籤:
元注釋:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
作用:@interface用來聲明一個註解,其中的每一個方法實際上是聲明了一個配置參數。
樣本:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD}) public @interface LogAnnotation {//業務模組IdString moduleId();//功能IDabstract String functionId() default "99"; //操作說明 String option(); //app參數 abstract String[] Params() default{};} 元注釋,即為註解本身做註解,@interface用來聲明一個註解,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱,傳回值類型就是參數的類型。可以通過default來聲明參數的預設值。在這裡可以看到@Retention和@Target這樣的元註解,用來聲明註解本身的行為。@Retention用來聲明註解的保留原則,有CLASS、RUNTIME和SOURCE這三種,分別表示註解儲存在類檔案、JVM運行時刻和原始碼中。只有當聲明為RUNTIME的時候,才能夠在運行時刻通過反射API來擷取到註解的資訊。@Target用來聲明註解可以被添加在哪些類型的元素上,如類型、方法和域等。
JPA注釋:
@Repository或是使用Spring的<jpa:repositories>來掃描包下的DAO
作用:使用Spring JPA架構來自動實現商務邏輯 樣本:
@Repositorypublic interface AppVersionDao extends PagingAndSortingRepository<AppVersion, String> { }
<jpa:repositories base-package="com.foresee.hn.**.dao" entity-manager-factory-ref="entityManagerFactory"
transaction-manager-ref="transactionManager" repository-impl-postfix="CustomImpl"/>
@Service("gztdService")
@Transactional()
作用:
在service類前加上@Transactional,聲明這個service所有方法需要交易管理。每一個業務方法開始時都會開啟一個事務。
@Transactional(readOnly = true)
作用:聲明成唯讀事務,提高查詢效率。
樣本:@Service("gztdService")
@Transactional(readOnly = true)public class GztdServiceImpl extends GenericServiceImpl<RzGztd, Long> implements GztdService { ...}
@Transactionalpublic void addRzGztd(RzGztd rzGztd){...}
@PersistenceContext(unitName="itax")
作用:注入由Spring容器託管的EntityManager對象,執行與持久化有關的操作
樣本:
@PersistenceContext(unitName="itax")private EntityManager entityManager; applicationContext.xml中的配置:<bean id="abstractEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" abstract="true"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="generateDdl" value="${hibernate.generateDdl}" /> <property name="showSql" value="${hibernate.showSql}" /> <property name="database" value="${hibernate.database}"/> </bean> </property> <property name="persistenceUnitName" value="itax"></property> <property name="jpaProperties"> <map> <entry key="hibernate.format_sql" value="${hibernate.format_sql}"/> </map> </property> <property name="packagesToScan" value="com.foresee.hn.taxoffice.common.entity" /></bean>
@RequestMapping(value = "/submit")
作用:可在類或方法上添加,組合使用,表示對應的請求會被該Controller接受。 樣本:@Controller
@RequestMapping(value="/submit")public class AppVersionController extends CommonController {... @LogAnnotation(moduleId=LogModule.MODUlE_WEB_APPGL,functionId=LogModule.WEB_APPGL_INDEX)
@RequestMapping(value="/release",method={RequestMethod.POST,RequestMethod.GET}) public String showReleasePage(AppVersionBean bean,Model model,HttpServletRequest request){ bean.setUserId(String.valueOf(this.getLoginUser(request).getCzydm())); bean.setUserName(this.getLoginUser(request).getCzyxm()); bean.setReleaseTime(new Date()); bean.setVersionId(sequenceService.getAppVersionSequence()); model.addAttribute("queryParams", bean); return "main/app/release"; } }
項目中用到的Java注釋