IOC相关
首先要在配置文件中启用注解扫描:
<context:component-scan base-package="com"/>
<context:component-scan />
标签负责扫描哪些类有注解,base-package为需要扫描的包路径(含所有子包)。
@Controller:用于标注控制器组件
@Service:用于标注业务层组件
@Repository:用于标注数据访问组件
@Component:用于对比较中立的类进行注解。与前三个注解等效。
@Resource:用于依赖关系装配。默认按名称装配。名称可以通过@Resource的name属性指定。如果没有指定name属性,则支持自动装配。
@Autowired:自动装配
该注解可以实现对方法形参的自动装配,查找被标注的方法的入参类型的Bean,并调用方法自动注入
有注解的类,会自动注册为bean,并将bean的名字设置为该类的类名,但首字母小写,可以通过添加参数来指定名称。例:@Controller("con")
AOP相关
启动基于注解的AspectJ支持
<aop:aspectj-autoproxy />
@Aspect:使用@Aspect注解的类,Spring会当作切面类处理。
@Before(切入点表达式):前置通知
@AfterReturning(切入点表达式):后置通知
@AfterThrowing(pointcut = 连接点,throwing = "e"):异常通知
必须使用@AfterThrowing(pointcut = 连接点,throwing = "e")的形式,否则会出现”error at ::0 formal unbound in pointcutd”错误
@After(切入点表达式):最终通知
@Around(切入点表达式):环绕通知
@Pointcut:定义切入点表达式,需要同时定义一个切入点方法,返回值为void且方法体为空
事务管理
<!—为事务管理器注册注解驱动器-->
<tx:annotation-driven transaction-manager="txManager"/>
@Transactionald 使用该注解的类会添加事务
@Transactional(readOnly = true) 对不涉及写数据库写入操作的方法,可加入只读属性以提高速度
MVC
@RequestMapping("url") 注解请求地址
给处理方法添加RequestMapping注解
对应前端请求地址http://localhost:8080/TestApp/login.do
@ResponseBody
Spring4的控制器可以使用response对象做出ajax响应,并利用@ResponseBody注解自动将数据生成json响应给浏览器。
@ModelAttribute
被@ModelAttribute注释的方法会在此controller每个方法执行前被执行, 可以用来拦截请求、控制登录权限等
Controller
注解一个类表示控制器,Spring MVC会自动扫描标注了这个注解的类。
RequestMapping
请求路径映射,可以标注类,也可以是方法,可以指定请求类型,默认不指定为全部接收。
RequestParam
放在参数前,表示只能接收参数a=b格式的数据,即 Content-Type为 application/x-www-form-urlencoded类型的内容。
RequestBody
放在参数前,表示参数从request body中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即 Content-Type不为 application/x-www-form-urlencoded类型的内容。
ResponseBody
放在方法上或者返回类型前,表示此方法返回的数据放在response body里面,而不是跳转页面。一般用于ajax请求,返回json数据。
RestController
这个是Controller和ResponseBody的组合注解,表示@Controller标识的类里面的所有返回参数都放在response body里面。
PathVariable
路径绑定变量,用于绑定restful路径上的变量。
@RequestHeader
放在方法参数前,用来获取request header中的参数值。
@CookieValue;
放在方法参数前,用来获取request header cookie中的参数值。
GetMapping PostMapping PutMapping.. *Mapping的是Spring4.3加入的新注解,表示特定的请求类型路径映射,而不需要写RequestMethod来指定请求类型。
演示
import org.dom4j.util.UserDataElement;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(value = "/get/{no}", method = RequestMethod.GET)
@ResponseBody
public Object get(@PathVariable("no") String no) {
return new UserDataElement("");
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public void save(@RequestBody UserDataElement user) {
}
}
网友评论