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
专门用于定时任务的。
参考文章:
- https://www.cnblogs.com/think-in-java/p/5474740.html
- https://www.cnblogs.com/lxcmyf/p/5674399.html
- https://www.cnblogs.com/shuaifing/p/8119664.html
- https://blog.csdn.net/qq_37939251/article/details/83058065
- https://blog.csdn.net/LittleMangoYX/article/details/81868814
- https://www.cnblogs.com/duanxz/p/4520627.html
- https://docs.spring.io/spring/docs/5.1.0.RC2/spring-framework-reference/integration.html#cache
如果以后再有其他的注解的话 ,那就再加上吧。
以上是关于Springboot中一些注解的总结的主要内容,如果未能解决你的问题,请参考以下文章