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);