Springboot中一些注解的总结

Posted microhex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot中一些注解的总结相关的知识,希望对你有一定的参考价值。

刚开始接触Spring和SpringMVC,用到了大量的注解,记录一下这些注解的作用和意义。主要是项目中用到的,其他的可能没有记录,毕竟注解太多了:

@Autowired

有一个默认属性required() , 表明该注解修饰的对象是否可以为null。它是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在。如果你需要根据name来实现装配,那么需要使用@Qualifier来指明:

@Autowired
@Qualifier("MyAddressService")
private IAddressService iAddressService;

@Resource

@Resource默认是根据name来实现对象装配的。与@Autowired不同的是,@Resource来自javax.annotation.Resource,并非来自spring包,但是这个注解被spring识别。它有一下几个属性值:

public @interface Resource 
    String name() default "";
    
    Class<?> type() default java.lang.Object.class;
  
   //......

名称name和类型type。使用name属性,则使用Byname方式装配;使用type,则使用ByType方式装配,基本装配顺序为:

@Resource装配顺序:
①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

@Service

用于对应业务层的bean的实例化。例如:

@Service("addressService")
public class AddressServiceImpl implements IAddressService 


@Service(“addressService”) 告诉spring,当创建AddressServiceImpl 实例时,则bean的名称必须为addressService,这样Action中,使用@Autowired、@Resource就可以直接使用这个bean实例。以前我们如果要使用AddressService对象时,我们一般都是AddressService addressService = new AddressServiceImpl(), 都是靠new,但是现在spring把new的功能回收了,那么Action中需要对象时,都需要spring依赖注入了。
本来addressService可以自己去创建自己的实例化对象,但是这个能力被spring拿去了,只有spring才能new出来AddressServiceImpl。此时addressService只有等到spring初始化AddressServiceImpl完成之后,再“请求”Spring把创建好的“AddressServiceImpl”实例交给它,这样才能够使用"AddressServiceImpl", 这就是Spring核心思想“控制反转”,也就“依赖注入”。“依赖注入”很好理解,我需要干活,然后spring这个框架给我注入我需要的实例,所以就对spring产生了依赖。

@Repository

用于数据访问层bean的实例化,例如:

@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> 


@Repository(value=“userDao”)告诉spring,创建一个名为userDao的UserDaoImpl实例,那么如果使用了@Resource(“userDao”)注解时,那么就可以将UserDaoImpl对象注入到目标对象中了.

@Controller & @RestController

对应的是表现层(或者控制层)的Bean。

@RestController
@Controller
public class UserController 


使用@Controller注解标识UserController之后,就表示要不UserContorller交给Spring容器管理,在Spring容器中将会存在一个userController的action,这个名字是根据UserController来取的。@Controller和@RestController都是控制层的bean,主要区别在于

@RestController =  @Controller + @ResponseBody

如果我们做接口,需要返回JSON、XML等数据,则需要用到@RestController, 方法中return什么数据,我们就接收什么数据;如果需要返回jsp、html页面,则需要用到@Controller,它可以配合视图解析器InternalResourceViewResolver返回目标视图。

@RequestMapping

配置URL映射,浏览器中所有输入的url地址与Controller中类与方法相对应。@RequestMapping既可以作用到类上,也可以作用到方法上。

@RestController
@RequestMapping("/api")
public class UserController 
    private static Logger logger = LoggerFactory.getLogger(UserController.class);

    private BaseService mBaseService = new BaseService();

    @RequestMapping(value = "/hello", method = RequestMethod.POST, produces = "*/*")
    public String hello() 
 		return "hello world";
	

那么浏览器输入: localhost:8080/api/hello页面就将显示Hello world.

@GetMapping

@RequestMapping 的升级版,主要用于Http GET请求方式

@POSTMapping

@RequestMapping 的升级版,主要用于Http POST请求方式


@SpringBootApplication

该注解始于spring1.2。主要功能是两个配置和引导。第一它主要是Spring配置类,第二它启用了Spring boot应用程序的自动配置功能。@SpringBootApplication可以概括为三个功能:

@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiguration

@Configuration

此标注标记基于Java的配置的Configuration类。

@ComponentScan

启动了组建扫描,那些被@Autowired、@Resource、@Service、@Repository、@Controler等注解标识的对象将会被实例化,并自动注入到需要的地方。

@EnableAutoConfiguration

启动自动配置功能。


@Bean

告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方Spring只会调用一次,随后这个Spring将会把这个Bean对象放到自己的IOC(控制反转)容器中. 它需要与@Configuration一起使用。

@Configuration
public class RedisConfigurer extends CachingConfigurerSupport 

	//生成一个JedisPool对象
    @Bean
    public JedisPool redisPoolFactory() 
    
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);

        return jedisPool;
    


@Value

读取配置文件属性值,需要和另外一个注解@PropertySource配合使用,@PropertySource是设置配置文件路径,在类上添加注解,如果是默认路径可以去掉该注解。

需要用@PropertySource的有:

例如非application.properties,classpath:config/my.properties指的是src/main/resources目录下config目录下的my.properties文件,
例如有多配置文件引用,若取两个配置文件中有相同属性名的值,则取值为最后一个配置文件中的值
在application.properties中的文件,直接使用@Value读取即可,application的读取优先级最高.

@PropertySource("classpath:config/my.properties","classpath:config/config.properties")
public class TestController() 

	@Value("$user_name")
	private String userName;


@Order

定义了组件的加载顺序,主要的作用是对一些重要但是特别紧急的组件可以延迟初始化,让出CPU和其他资源先初始化其他重要的组件。一般也只是用在初始化日志,或者周期性比较长的定时任务。


@Scheduled

主要用于定时任务,具体定时任务我以前写过这样一篇文章:https://blog.csdn.net/u013762572/article/details/88243604
专门用于定时任务的。


参考文章:

  1. https://www.cnblogs.com/think-in-java/p/5474740.html
  2. https://www.cnblogs.com/lxcmyf/p/5674399.html
  3. https://www.cnblogs.com/shuaifing/p/8119664.html
  4. https://blog.csdn.net/qq_37939251/article/details/83058065
  5. https://blog.csdn.net/LittleMangoYX/article/details/81868814
  6. https://www.cnblogs.com/duanxz/p/4520627.html
  7. https://docs.spring.io/spring/docs/5.1.0.RC2/spring-framework-reference/integration.html#cache

如果以后再有其他的注解的话 ,那就再加上吧。

以上是关于Springboot中一些注解的总结的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot常用注解总结

SpringBoot第十章 总结-注解

spring和springboot常用注解总结

总结-注解

解决启动SpringBoot项目加载 @Value注解报异常问题

解决启动SpringBoot项目加载 @Value注解报异常问题