SSM框架之使用注解开发
注解 小巧,方便,本意是便于开发。
但注解缺比较繁多,功能复杂,个数多,学多了以后就比较会容易忘记。这篇的目的就是复习一下SSM框架中之前用到的所有注解
MyBatis篇
首先就是用于Mapper接口中的4个CRUD注解和@Param注解
@Select 注解 同 @Insert @Update @Delete
在Mapper接口中,加在声明的方法上,并接上sql语句。
@Select("select * from user where id = #{id}")
User getUserByID(@Param("id") int id);
@Param注解用于给方法参数起一个名字。
- 在方法只接受一个参数的情况下,可以不使用@Param。
- 不使用@Param注解时,参数只能有一个,并且是Javabean。
不过,增删改查的四大注解只能够处理简单的业务。
在规范的约束下,更多的会使用xml配置
Spring 篇
在使用Spring注解开发之前,需要在Spring配置文件中开启属性注解支持!
<context:annotation-config/>
以及扫描包,使包下的注解生效!
<context:component-scan base-package="com.kuang.pojo"/>
@Autowired
-
直接用在属性上,或者set方法上
-
需要导入spring-aop的包!
-
先按byName的模式寻找(找与set方法后半段名字相同的id),如果找不到,再使用byType寻找(class对应的类型要唯一)。
-
如果不唯一则可启用@Qualifier注解
-
@Qualifier(value=“在配置文件中其二的id”)
-
@Qualifier与@Autowired 需要成对出现
-
@Autowired(required=false) 说明:false,对象可以为null;true,对象必须存对象,不能为null。
@Resource
-
直接用在属性上,或者set方法上
-
@Resource(name=“xxx”) 如果像这样有指定的name属性,就先按该属性进行byName模式的装配
-
再次进行默认的byName方式进行装配
-
如果都不行,再按照byType的方式自动装配
@Nullable
- 字段如果标记了这个注解,说明这个字段可以为null
@Component
-
作用于类上方,等价于在spring配置文件中的标签
-
@Component有几个衍生注解,在web开发中,会按照mvc三层架构分层
- dao 层中 使用 @Repository
- service 层中 使用 @Service
- controller 层中 使用 @Controller
-
这四个注解功能相同,都代表将某个类注册到Spring容器中,装配bean
-
@Value注解
- 使用在属性或set方法上,@Value(“值”),等价于在spring配置文件中的标签内的标签,为属性赋值
@Scope
- 作用域注解,作用于类的上方
- 默认的就是@Scope(“prototype”)
在SpringBoot中,使用纯Java的方式配置spring的方式比较常见,下面是关于这个的注解
@Configuration
- 代表下面这个类是配置类
@ComponentScan
-
扫描包下的注解,使之生效
-
@ComponentScan("com.kuang.pojo")
@Import
- 导入合并其他的配置类
@Bean
- 通过方法注册一个bean,这里的返回值就是Bean的类型,方法名就是bean的id
@Bean
public Dog dog(){
return new Dog();
}
注解实现AOP
@Aspect
- 代表这个类是一个切面
@Before @After @Around
-
代表切入点
@Before("execution(* com.kuang.service.UserServiceImpl.*(..))")
SpringMVC篇
多数情况下SpringMVC是最喜爱注解的。
SpringMVC也是属于Spring的一部分,因此也需要扫描包,使包下的注解生效
<context:component-scan base-package="com.kuang.controller"/>
同时需要mvc注解驱动
<mvc:annotation-driven />
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入
|
| |
@Controller
- 与@Component同作用,且相当于实现了Controller类
@RequestMapping
-
作用在类上或者方法上,映射请求路径
-
实际的请求路径就是类上的@RequestMapping再加上方法上的@RequestMapping
-
还有其衍生注解,@GetMapping,@PostMapping
@RequestMapping(method = RequestMethod.POST)
@PathVaribale
-
让方法参数的值对应绑定到一个URI模板变量上(接收请求路径中占位符的值)
@RequestParam
- 将参数改名为@RequestParam(“值”)中的值,原来的参数名,不再能使用
@RestController
-
类下所有的方法都不会走视图解析器,而是返回一个字符串
-
@ResponseBody,注解的方法不会走视图解析器,而是返回一个字符串
目前用过的就这么多了,随着经验增加还会用到其他注解,不定期更新!