zoukankan      html  css  js  c++  java
  • Spring Boot学习(四)常用注解

    一、注解对照表

    注解

    使用位置

    作用

     @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

  • 相关阅读:
    AS将一个项目导入到另一个项目中
    Android Studio出现:Cause: unable to find valid certification path to requested target
    小米手机Toast带app名称
    PopupWindow 点击外部区域无法关闭的问题
    EditText inputType类型整理
    Fragment通过接口回调向父Activity传值
    Android selector一些坑
    Installation failed with message Failed to commit install session 634765663 with command cmd package
    旷视上海研究院机器人方向招聘
    语义SLAM的数据关联和语义定位(四)多目标测量概率模型
  • 原文地址:https://www.cnblogs.com/riches/p/11677968.html
Copyright © 2011-2022 走看看