@Resouce和@Autowired
public class UserService {
@Autowired
@Qualifier(name="userDao1")
private UserDao userDao;
}
// 当一个类型有多个bean值的时候,会造成无法选择具体注入哪一个的情况,这个时候我们需要配合着@Qualifier使用。
public class UserService {
@Resource
private UserDao userDao;
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(type="TeacherDao")
private TeacherDao teacherDao;
@Resource(name="manDao",type="ManDao")
private ManDao manDao;
}
// @Resource默认使用byName的形式进行装配,userDao
// @Resource可以减少代码和Spring之间的耦合。
@RequestParam、@RequestBody和@ModelAttribute区别
public String requestParamTest(String username, HttpServletRequest request){}
// 注:http中的参数可以逐个取也可以一次取出整个request对象
@RequestParam(value="username") String userName
// 转换get或者post中的参数到变量中,如username转成userName,逐个取
@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型) RequestParam实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段
get方式中query String的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。
@ExceptionHandler(RuntimeException.class) 与@ControllerAdvice
// 使用@ExceptionHandler,可以处理异常, 但是仅限于当前Controller中处理异常, @ControllerAdvice可以配置basePackage下的所有controller. 所以结合两者使用,就可以处理全局的异常了.
// 控制器增强
@ControllerAdvice
public class ControllerHanderException {
// 自定义异常类型
@ExceptionHandler(CustomException.class)
@ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public Map<String, Object> handleUserNotExistException(CustomException excep) {
Map<String, Object> result = new HashMap<>();
result.put("code", excep.getCode());
result.put("msg", excep.getMessage());
result.put("data",new ArrayList<>());
return result;
}
}
public class CustomException extends RuntimeException {
private static final long serialVersionUID = 7965835132529665832L;
private String code;
private String msg;
public CustomException(String code, String msg){
super(msg);
this.code = code;
this.msg = msg;
}
public CustomException(String msg){
super(msg);
this.code = "500";
this.msg = msg;
}
public CustomException(CodeEnum codeEnum){
super(codeEnum.getMsg());
this.code = codeEnum.getCode();
this.msg = codeEnum.getMsg();
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
@ResponseStatus改变报文状态
@ResponseStatus注解加在目标方法上,一定会抛出异常。但是如果没有发生异常的话方法会正常执行完毕。
@ResponseStatus注解加在自定义异常类上
@ResponseStatus注解配合@ExceptionHandler注解使用会更好
注:serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
@RestController
@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了
扫描注解
<context:component-scan base-package="com.spring.mvc.controller"/>
扫描指定的包中的类上的注解,常用的注解有:
@Controller 声明Action组件
@Service 声明Service组件 @Service("myMovieLister")
@Repository 声明Dao组件
@Component 泛指组件, 当不好归类时.
@RequestMapping("/menu") 请求映射
@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")
@Autowired 用于注入,(srping提供的) 默认按类型装配
@Transactional( rollbackFor={Exception.class}) 事务管理
@ResponseBody
@Scope("prototype") 设定bean的作用域
ioc相关
@Configuration @bean @Value
// 配置注解,将定义
@Configuration
public class MainConfig {
//在properties文件里配置
@Value(“${wx_appid}”)
public String appid;
protected MainConfig(){}
@Bean
public WxMpService wxMpService() {
WxMpService wxMpService = new WxMpServiceImpl();
wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
return wxMpService;
}
}