一、注解对照表
注解 |
使用位置 |
作用 |
@Controller | 类名上方 | 声明此类是一个SpringMVC Controller 对象,处理http请求 |
@RequestMapping | 类或方法上 | 用在类上,表示所有响应请求的方法都是以该地址作为父路径 |
@ResponseBody | 方法上 | 将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式(Json/xml)后,写入到Response对象的body数据区。 |
@RestController | 类名上 | 可代替@ResponseBody 和 @Controller合在一起的作用。但不能返回Jsp和HTML页面了,将方法返回的对象直接在浏览器上展示成json格式。 |
@RequestBody | 方法参数前 | 常用来处理Content-Type: application/json, application/xml等,意味着HTTP消息是JSON,需转化为指定类型参数 |
@Service | 类名上 | 声明是一个业务处理类(实现类非接口类) |
@Repository | 类名上 | 声明是一个数据库或其他NOSql访问类(实现类非接口类) |
@Component | 类名上 | 声明此类是Spring管理类,常用在无法用@Service、@Repository描述的Spring管理类上,相当于通用的注解 |
@Configuration | 类名上 | 声明此类是一个配置类,常与@Bean配合使用 |
@Bean | 方法名上 | 声明该方法返回结果是一个Spring容器管理的Bean,包含@PostConstruct和@PreDestory |
@Qualifier | 类名或属性上 | 为Bean指定名称,随后再通过名字引用Bean |
@Autowired | 属性或构造函数参数上 | 按byType自动注入 |
@Resource | 类名上 | 默认按 byName自动注入 |
@Value | 属性上 | 用于获取配置文件中的值 |
@PathVariable | 方法参数前 | 将URL获取参数,映射到方法参数上 |
@RequestParam | 方法参数前 | 获取请求参数的值 |
@SpringBootApplication | 类名上 | 复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan 这三个注解 |
@Transactional | 方法或类名前 | 分为声明式事务管理(基于AOP,使用@Transactional注解)和编程式事务管理(TransactionTemplate) |
二.注解用法示例
1.@Controller
用在类名
@Controller @RequestMapping("/api/v1/user") public class UserController {}
2.@RequestMapping
用在类名
@Controller @RequestMapping("/api/v1/user") public class UserController {}
用在方法名
@RequestMapping(value = "getuser", method = RequestMethod.POST) public List<User> selectAll() { return userService.selectAll(); }
3.@ResponseBody
用在方法名上
将返回对象输出到客户端,如果是字符串,直接输出;如果不是,则默认用Jackson序列化成Json字符串输出。
@ResponseBody public User addUser(@RequestBody User user) {}
该注解将返回类型转换为指定格式,格式由程序控制,格式包括json、text、xml和其他。若转为Json,需要依赖Json解析Jar包。
4. @RestController
用于返回json、text、xml和其他等格式的数据,但不能返回Jsp和HTML页面。
@RestController @RequestMapping("/api/v1/user") public class UserController {}
5.@RequestBody
过使用HandlerAdapter,配置的HttpMessageConverters来将请求内容,转为指定的对象。Spring boot 默认用Jackson来处理反序列化工作。 下面示例是将请求Json参数,利用@RequestBody直接注入到EnterpriseEntity中
@RequestMapping(value = "/enterprise/update", method = RequestMethod.PUT) public void updateEnterpriseInfo(@RequestBody EnterpriseEntity enterprise) { }
6.@Service
用在ServiceImpl实现类上,声明一个业务逻辑处理类。
@Service("userService") public class UserServiceImpl implements UserService {}
7.@Repository
用在daoImpl实现类上,声明一个数据库访问类
@Repository public class IocDao implements IIocDao{ public void add(){ } }
8.@Component
如用在Mybatis的Mapper类上
@Component @Mapper public interface UserMapper { int deleteByPrimaryKey(Long userId); }
9.@Configuration
@Configuration @EnableCaching public class RedisConfig { @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); return cacheManager; } }
10.@Bean
@Bean(name = "kafkaContainer") public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerFactory()); factory.setConcurrency(1); factory.getContainerProperties().setPollTimeout(5000); return factory; }
11.@Qualifier
先指定一个名字:@Qualifier(“primaryDataSource”)
@Autowired @Qualifier("primaryDataSource") private DataSource primaryDataSource;
再通过名字:@Qualifier(“primaryDataSource”)引用
@Bean(name = "primaryDataSource", initMethod = "init") @Qualifier("primaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.primary") @Primary public DataSource primaryDataSource() { DataSource datasource = DruidDataSourceBuilder.create().build(); return datasource; }
12.@Autowired
@Autowired @Qualifier(value = "entityManagerFactoryPrimary") LocalContainerEntityManagerFactoryBean entityManager;
13.@Resource
配置类:@Component标识这是一个需要注册为Bean的类,注册为Bean以后就可以在Spring容器中通过Resource注入
@Component("jpushConfig") public class JpushConfig { @Value("${jpush.appKey}") private String appkey; @Value("${jpush.masterSecret}") private String masterSecret; @Value("${jpush.liveTime}") private String liveTime; public String getAppkey() { return appkey; } public String getMasterSecret() { return masterSecret; } public void setLiveTime(String liveTime) { this.liveTime = liveTime; } }
使用配置:
@Resource
JpushConfig jpushConfig;
14.@Value
properities属性文件中创建键值对
spring.kafka.consumer.topic=test-topic
在Java中将properities属性文件中的值,注入到属性中。
@Value("${spring.kafka.consumer.topic}") private String topic;
15.@PathVariable
@RequestMapping("/api/{type}") public String getUser(@PathVariable int type) {}
{type}中的type需要跟参数名统一,若不统一,可用(value = "type")指定:
@RequestMapping("/api/{type}") public String getUser(@PathVariable(value = "type") int myType) {}
请求示例:http://localhost:8080/User/getUser/123
16.@RequestParam
@Controller @RequestMapping("/User") public class HelloWorldController { @RequestMapping("/getUser") public String getUser(@RequestParam("uid")Integer id, Model model) { System.out.println("id:"+id); return "user"; } }
请求示例:http://localhost:8080/User/getUser?uid=123