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

  • 相关阅读:
    一些css
    nginx访问静态资源
    ngixn 基本命令
    vue打包
    java集合-HashMap
    java多线程-线程池
    java多线程-中断线程
    服务端获取nginx代理后的用户真实ip
    nginx学习笔记
    数码视讯宣讲会现场笔试题
  • 原文地址:https://www.cnblogs.com/riches/p/11677968.html
Copyright © 2011-2022 走看看