SSM框架常用注解

常用注解

MyBatis

@Param 实现多参数入参

public void add(@Param("id") int id , @Param(value="name") String userName)

Spring

加载注解定义的Bean(XML配置)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       //添加对context命名空间的声明
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
	//声明
	http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <!--扫描注解标注的类.base-package属性指定需要扫描基准包,多个包名用逗号隔开-->
    <context:component-scan base-package="Demo1.service,Demo1.dao" />
</beans>

定义Bean组件的注解

@Component(“userDao”)   定义Bean组件

//定义了一个Dao,等于在XML配置中写了
//<bean id="userDao" class="dao.impl.UserDaoImpl"></bean>
@Component("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void add(User user) {
        System.out.println("添加到数据库成功.........");
    }
}
=============================================================
//将注解定义的组件自动装配
@Autowired
prviate UserDao userDao;

@Repository(“userDao”)  标注Dao类

//标注此类为Dao类
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void add(User user) {
        System.out.println("添加到数据库成功.........");
    }
}
=============================================================
//将注解定义的组件自动装配
@Autowired
prviate UserDao userDao;

@Service     标注业务类

@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public void add(User user) {
        userDao.add(user);
    }
}

@Controller    标注控制器类

//标注控制器类
@Controller
public class UserController{

}

装配注解

@Qualifier   有相同类型匹配的Bean时,用此注解指定所需Bean的名称

@Qualifier("userDao")
private UserDao userDao;

@Autowired   自动装配对应的Bean组件

    required属性默认为true,即必须找到匹配的Bean完成装配 ,
    否则抛出异常,也可以设置属性为false

//将注解定义的组件自动装配
@Autowired
prviate UserDao userDao;
==========================
@Autowired(required = falser)
prviate UserDao userDao;

JAVA标准装配注解

@Resource

      如果该注解没有指定name值,将根据字段名或者setter方法名产生的默认的名称

@Resource(name="userDao")
//为dao属性注入name为userDao的bean
private UserDao userDao;
==========================================
//查找名为userDao的Bean,注入属性
@Resource
private UserDao userDao;
==========================================
//查找名为userDao的Bean注入setter方法
@Resource
public void setUserDao(UserDao userDao){
	this.dao = userDao;
}

AspectJ注解标注切面

使用时需要在sping.xml中配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:aop="http://www.springframework.org/schema/aop"
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--创建bean-->
	<bean class="aop.UserServiceLogger"></bean>
	<!--开启注解-->
	<aop:aspectj-autoproxy/>   
</beans>

@Aspect  定义切面

//定义切面
@Aspect
public class Logger{
	private static final Logger log= "";
}

@Before  前置增强

//定义前置增强方法
@Before("execution(* service.UserService.*(..))")
public void before(JoinPoint jp){
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法");
}

@AfterReturning  后置增强

//定义后置增强方法
@AfterReturning(pointcut="execution(* service.UserService.*(..))",returning="returnValue")
public void AfterReturning(JoinPoint jp,Object returnValue){
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,方法返回值="+returnValue);
}

@Pointcut  指定切入点

作为切入点签名的方法必须返回void类型

//指定切入点
@Pintcut("execution(* service.UserService.*(..))")
public void pointcut(){}

@Before("pointcut()")
public void before(JoinPoint jp){
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法");
}

@AfterReturning(pointcut="pointcut()",returning="returnValue")
public void AfterReturning(JoinPoint jp,Object returnValue){
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,方法返回值="+returnValue);
}

@AfterThrowing

//定义最终增强方法
@AfterThrowing(pointcut="execution(* service.UserService.*(..))",throwing = "e")
public void AfterThrowing(JoinPoint jp,RuntimeException e){
	log.error("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法异常:"+e);
}

@After  最终增强

//定义最终增强方法
@After("execution(* service.UserService.*(..))")
public void After(JoinPoint jp){
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法结束");
}

@Around   环绕增强

//定义最终增强方法
@Around ("execution(* service.UserService.*(..))")
public void Around (ProceedingJoinPoint jp) throws Throwable{
	log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法结束");
	try{
		Object result = jp.proceed();
		retrun result;
	}catch(Throwable e){
		throw e;
	}finally{
		log.info(jp.getSignature().getName()+"方法结束");
	}
}

开启声明式事务处理注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
   <!--定义事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--开启声明式事务注解-->
    <tx:annotation-driven transaction-manager="txManager"/>
</beans>

@Transactional   配置事务

//为该类的所有业务方法统一添加事务处理,也可以配置单一方法
@Transactional 
@Service("userService")
public class UserServiceImpl implements UserService{
	//为方法配置事务处理
	@Transactional(propagation=Propagation.SUPPORTS)
	public void Test(){
		//......
	}
}

指定Bean的作用域

@Scope

Bean的作用域
singleton: 默认值,以单例模式创建,只有一个
prototype: 每次从容器中获取Bean时,都会创建一个新的实例
request: 用于Web应用环境,针对每次HTTP请求都会创建一个实例
session: 一个会话共享同一个实例
global session: 仅在Portlet的Web应用中使用,同一个全局会话共享一个实例,
对于非Portlet环境,等同于session

@Scope("prototype")
@Service("userService")
prublic void UserService(){

}

SpringMVC

@RequestMapping   映射指定请求的URL

@RequestMapping("/test")
public String Test(){
	//.....
}

@RequestParam   指定其对应的请求参数(是否必须)

@RequestMapping("/test")
public String Test(@RequestParam(value="uesrName",required=false) String userName){
	//value:参数名
	//required:是否必须,默认为true,表示请求中必须包含对应的参数名,若不存在将抛出异常
	//defaultValue:默认参数名,不推荐使用3335
}

@ModelAttribute   将入参的数据对象放入数据模型中

@RequestMapping(value="/add")
public String add(@ModelAttribute("user")User user){
	return "useradd";
}
//不使用注解进行对象入参,可以把Model模型进行入参
@RequestMapping(value="/add")
public String add(User user,Model model){
	model.addAttribute("user",user);
	return "useradd";
}

@SessionAttributes    将模型中属性存入HttpSession中,在类上使用

@Controller
@SessionAttributes("user")
public class ModelController {

    @ModelAttribute("user")
    public User initUser(){
        User user = new User();
        user.setName("default");
        return user;
    }

}

@SessionAttribute    在Session作用域读取相关属性,在参数上使用

@RequestMapping("/session")
    public String session(@SessionAttribute("user") User user){
        return "index";
    }

@ExceptionHandler   局部异常处理

@ExceptionHandler(value={RuntimeException.class})
public String handlerException(RuntimeException e,HttpServletRequest req){
	//在同一处理器类中,有方法抛出RuntimeException异常将会被捕获到此进行处理
	req.setAttribute("e",e);
	return "error";
}

@DateTimeFormat   时间类型的属性格式化

public class User(){
@DateTimeFormat(pattern="yyyy-MM=dd")
private Date birthday;
}

@RequestBody  一般在异步请求时使用,返回的数据将输出到响应流中

	@RequestMapping("/login")
	@RequestBody
  public User login(User user, HttpServletResponse response){
    return new User();
  }
  //效果等同于如下代码:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse rep){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

@JSONField   解决json处理时间类型的问题

public class User(){
@JSONField(pattern="yyyy-MM=dd")
private Date birthday;
}

@RestController  合并@Controller和@RequestBody

@RestController
public class HospitalController {
    @Autowired
    private HospitalService hospitalService;

    @RequestMapping(value = "/findAllHospital",method = RequestMethod.GET)
    public  List<Hospital> findAllHospital(){
        List<Hospital> hospitalList= hospitalService.findAllHospital();
        return hospitalList;
    }

@InitBinder  装配自定义编辑器

JSR 303注解

Spring本身没有提供JSR303的实现,Hibernate Validator 实现了JSR303,所以要在项目中加入Hibernate Validator的jar文件
@Null //必须为null
@NotNull //必须不为null
@Empty //必须为空
@NotEmpty //必须不为空
@AssertTrue //必须为true
@AssertFalse //必须为false
@Min(value) //必须是一个数字,必须小于指定的值
@Max(value) //必须是一个数字,必须大于指定的值
@DecimalMin(value) //必须是一个数字,必须大于等于指定的值
@DecimalMax(value) //必须是一个数字,必须小于等于指定的值
@Size(max,min) //元素的大小必须在指定的范围内
@Digits(integer,fraction) // 必须是一个数字,其值必须在可接受的范围内
@Past //必须是一个过去的日期
@Future //必须是一个将来的日期
@Pattern(value) //必须符合指定的正则表达式
@Length //字符串大小必须在指定范围内
@Valid //让springMvc在完成数据绑定后,执行数据校验工作

@RequestMapping("/test")
//@Valid注解后面必须紧挨着一个BindingResult参数,否则spring会在校验不通过是直接抛出异常
public String Test(@Valid User user , BindingResult bindingResult){	
	//判断是否验证通过
	if(bindingResult.hasErrors){
		//.....
	}
}

REST风格

@PathVariable   可以将URL中的{xxx}占位符参数绑定到控制器处理方法的入参中

@RequestMapping(value="/view/{id}",method=RequestMethod.GET)
public String seteUser(@PathVariable String id , Model model){
	System.out.print(id);
	return "User";
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值