SSM
开发有基于注解开发和基于配置开发两种开发模式,当然也可以两种同时使用。其中基于注解式开发目前比较流行,基于配置开发对于大型项目而言需要大量的配置文件,管理和操作这些配置文件是一件非常令人头疼的事情,所以一般都是使用注解式开发,代码可读性和维护都很方便,下面是对SSM
的一些常用注解做了整理和归类。
1、bean相关注解
注解 | 说明 | 示例 |
---|---|---|
@Component | 声明没有明确角色的bean,在类上使用 | - |
@Controller | 声明控制器相关bean,在类上使用 | - |
@Service | 声明业务逻辑相关bean,在类上使用 | - |
@Repository | 声明数据访问bean,在类上使用 | - |
@Autowired | @Autowired是根据类型进行标注的,用来装配bean,可以注解属性和方法。默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false | @Autowired(required=false) |
@Qualifier | 当你创建多个具有相同类型的bean时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。 | @Autowired @Qualifier(“userService2”) private IuserService userService; |
@Inject | 作用同autowired,不加@Named注解,需要配置与变量名一致即可。 | @Inject @Named(“mongo”) private Mongo mongo; |
@Resource | 作用同autowired,默认安照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。 | @Resource(name = “userMapper”0) private UserMapper userMapper; |
@Bean | 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上) | - |
@Scope | 设置Spring容器如何新建Bean实例(方法上,得有@Bean) 其设置类型包括: Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), Protetype (每次调用新建一个bean) Request (web项目中,给每个http request新建一个bean) Session (web项目中,给每个http session新建一个bean) GlobalSession(给每一个 global http session新建一个Bean实例) |
- |
@PostConstruct | 在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod | - |
@PreDestory | 在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod | - |
@Configuration | 声明当前类为配置类,相当于xml形式的Spring配置。(类上) | - |
@ComponentScan | 用于对Component进行扫描,相当于xml中的context:component-scan(类上) | - |
@WishlyConfiguration | 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解。(类上) | - |
@Value | 为属性注入值(属性上) | @Value(“Michael Jackson”) private String name; |
@Test | 声明方法为测试方法,可以单独运行(方法上) | - |
2、开启第三方支持注解说明
注解 | 说明 | 示例 |
---|---|---|
@EnableAspectJAutoProxy | 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上) | - |
@Aspect | 声明一个切面(类上) | - |
@After | 在方法执行之后执行(方法上) | - |
@Before | 在方法执行之前执行(方法上) | - |
@Around | 在方法执行之前与之后执行(方法上) | - |
@PointCut | 声明切点 | - |
@Async | 在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务) | - |
@EnableAsync | 配置类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口(类上) | - |
@Scheduled | 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持) | - |
@EnableScheduling | 在配置类上使用,开启计划任务的支持(类上) | - |
@EnableWebMvc | 开启Web MVC的配置支持 | - |
@EnableConfigurationProperties | 开启对@ConfigurationProperties注解配置Bean的支持 | - |
@EnableJpaRepositories | 开启对SpringData JPA Repository的支持 | - |
@Transactional | 配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。 | - |
@EnableTransactionManagement | 开启注解式事务的支持 | - |
@EnableCaching | 开启注解式的缓存支持 | - |
3、springMvc相关注解
注解 | 说明 | 示例 |
---|---|---|
@Controller | 声明该类为SpringMVC中的Controller | - |
@RequestBody | 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前) | - |
@RequestMapping | 用于映射Web请求,包括访问路径和参数(类或方法上) | - |
@ControllerAdvice | 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,这对所有注解了 @RequestMapping的控制器内的方法有效。 | - |
@responseBody | 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上) | - |
@RestController | 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。 | - |
@ModelAttribute | 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。 | - |
@SessionAttributes | - | |
@ExceptionHandler | 用于全局处理控制器里的异常 | - |
@PathVariable | 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。 | - |
4、mybatis相关注解
注解 | 说明 | 示例 |
---|---|---|
@Mapper | 使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。 | - |
@repository | @repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中 | - |
@Insert | 插入sql , 和xml insert sql语法完全一样,如果数据库user表的 id 是自增长,我们可以加上 @Options 注解,那么该对象在插入后,id 属性会自动获取到主键。@Options(useGeneratedKeys=true, keyProperty=”id”) 其中的 id 对应数据库表中的主键字段。 | @Insert(value = { “INSERT INTO user (name, age, remark) VALUES (#{name}, #{age}, #{remark})” }) @Options(useGeneratedKeys=true, keyProperty=”id”) public void insertUser(User user); |
@Select | 查询sql, 和xml select sql语法完全一样 | @Select(“SELECT * FROM user WHERE id = #{id}”) public User getUserById(@Param(value = “id”) long id); |
@Results | 结果集合 | @Select(“SELECT * FROM user WHERE id = #{id}”) @Results({ @Result(property=”id”, column=”id”), @Result(property=”name”, column=”name”), @Result(property=”age”, column=”age”), @Result(property=”remark”, olumn=”remark”), }) public User getUserById(@Param(value = “id”) long id); |
@Result | 可以与@Result 一起使用,封装多个结果集 | - |
@ResultMap | 实现引用@Results 定义的封装。 | - |
@Update | 更新sql, 和xml update sql语法完全一样 | @Update(“UPDATE user SET name = #{name} WHERE id = #{id}”) public void update(@Param(value = “id”) Long id, @Param(value = “name”) String name); |
@Delete | 删除sql, 和xml delete sql语法完全一样 | @Delete(“Delete FROM user WHERE id = #{id}”) public void delete(@Param(value = “id”) Long id); |
@Param | 采用#{}的方式把@Param注解括号内的参数进行引用(括号内参数对应的是形参如 userName对应的是name) | Public User selectUser(@param(“userName”) String name, @param(“userpassword”) String password); |