元注解:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
作用:@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。
示例:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface LogAnnotation {
//业务模块Id
String moduleId();
//功能ID
abstract 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框架来自动实现业务逻辑
示例:
@Repository
public 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 {
...
}
@Transactional
public 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";
}
}