注解可以简化配置过程,免得一堆xml标签看的眼花。
大体过程:表示层(*.jsp,...)调用控制层(controller,action),控制层调用业务层(service),业务层调用数据访问层(dao)。
Spring:
- @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解对该类进行标注。不推荐使用。
- @Controller 对应控制层的Bean,也就是Action。标记在一个类上。
- @Service 对应业务层的Bean,可以加入名字如@Service("userService")。当Action需要使用该业务层的实例时,只需在Action中声名一个同名的变量来接收该对象(由Spring创建并注入)即可(配合@Resource注解)。标记在一个类上。
@Service("userService")
public class UserServiceImpl implements UserService {...}
// 注入userService
@Resource(name = "userService")
private UserService userService;
- @Repository 对应数据访问层的Bean,用法同@Service。当Service需要使用该数据访问层的实例时,只需声名一个同名变量来接受该对象(由Spring创建并注入)即可(配合@Resource注解)。标记在一个类上。
@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {...}
//注入userDao
@Resource(name = "userDao")
private BaseDao<User> userDao;
- @Autowired 一般用于消除 setter、getter方法。Spring会将这些传递过来的值或者引用自动分配给那些属性。可以对类成员变量、方法及构造函数进行标注。@Autowired(required=false)表示依赖不是必须的,当没有找到相应bean的时候可以为null。他是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier。
- @Inject 类似于@Autowired,不同的是@Autowired有一个request属性。是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named。
- @Value 可以简化读取properties文件中的配置值。
- @AspectJ 他标记在一个类上声名切面。Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置:
<!-- proxy-target-class 默认为false,表示使用jdk动态代理织入增强,当配为<aop:aspectj-autoproxy poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强 -->
<aop:aspectj-autoproxy/>
- @Pointcut @Pointcut(“execution(返回类型 方法所属类的全限定名.方法(参数))”)注解在新写的方法前来定义切点。
- @Before 在切点之前执行。
- @AfterReturning 在切点执行成功之后执行。
- @After 在切点之后执行。
- @AfterThrowing 在切点抛出异常后执行。
@Aspect
public class WQF{
@Pointcut("execution(* *.perform(..))")
public void performance(){}
@Before("performance()")
public void beforeMethod(){}
@AfterReturning("performance()")
public void afterReturingMethod(){}
@After("performance()")
public void afterMethod(){}
@AfterThrowing("performance()")
public void afterThrowingMethod(){}
}
Hibernate:
- @Entity
- @Table
- @Id
- @Column
- @GeneratedValue
- @OneToOne
- @OneToMany
- @JoinColumn
- @LazyCollection
Struts2:
- @Action/@Actions
- @Result/@Results
- @Scope
- @ParentPackage
- @Namespace
- @Resource
Spring MVC
- @Controller 使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。之后把这个控制器类交给Spring 来管理。有两种方法:
<!--方式一 在SpringMVC 的配置文件中定义bean 对象-->
<bean class="org.wqf.controller.Controller"/>
<!--方式二 在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器-->
<context:component-scan base-package = "org.wqf.controller" />
- @RequestMapping 使用@RequestMapping 注解的方法才是真正处理请求的处理器。可用于类或方法上。常用的属性有value和method。
value: 指定请求的实际地址,指定的地址可以是URI Template 模式;
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;比如:produces = {"application/json;charset=UTF-8"})
例如: 用于类上的 @RequestMapping("/seckill") 表示指定的请求地址为 localhost:8080/seckill/...。
用于方法上的 @RequestMapping(value = "/{seckillId}/detail", method = RequestMethod.GET) 表示指定请求地址为 localhost:8080/seckill/1000/detail 时由该方法来处理。
- @RequestParam @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name")
@Resource和@Autowired都是做bean的注入时使用:
- @Resource Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
- @Autowired @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
- @PathVariable 可以用来映射URL中的占位符到目标方法的参数中。比如:
@RequestMapping(value = "/{seckillId}/detail", method = RequestMethod.GET)
public String detail(@PathVariable("seckillId") Long seckillId, Model model) {
…… ……
}
- @CookieValue 用来获取Cookie中的值,将变量与指定的value参数名称绑定。value:参数名称;required:是否必须;defaultValue:默认值。比如:
public SeckillResult<SeckillExecution> execute(@PathVariable("seckillId") Long seckillId,
@PathVariable("md5") String md5,
@CookieValue(value = "userPhone", required = false) Long phone) {//将cookie变量userPhone与phone绑定
…… ……
}
- @SessionAttributes
- @ModelAttribute
- @ResponseBody 作用是将controller的方法返回的对象直接写入HTTP response body中。通常用来返回JSON数据或者是XML数据。常和@Requestmapping一起使用。
Mybatis
- @Insert
- @Delete
- @Update
- @Select
参考博客: 使用注解来构造IoC容器