Spring注解(包含SpringBoot)
目录
- 1. @SpringBootApplication(作用在启动类上)
- 2. @EnableAutoConfiguration(作用在启动类上)
- 3. @ComponentScan(作用在启动类上)
- 4. @Configuration(作用在启动类上、配置类上)
- 5. @Controller(作用在控制器类上)
- 6. @RestController(作用在控制器类上)
- 7. @Service((作用在服务(业务)类上))
- 8. @Repository(作用在类上)
- 9. @Component(作用在类上)
- 10. @Bean(作用在方法上)
- 11. @AutoWired(作用在属性上)
- 12. @Resource(name=”name”,type=”type”,作用在属性上)
- 13. @Qualifier(作用在属性上)
- 14. @RequestMapping(作用在方法上)
- 15. @ResponseBody(作用在方法上)
- 16. @Import
- 17. @ImportResource
- 18. @PropertySource(作用在类上)
- 19. @Value(作用在属性上)
- 20. @Inject
- 21. @PathVariable(作用在属性上)
- 22.@Mapper
- 23. @MapperScan
1. @SpringBootApplication(作用在启动类上)
声明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration + @EnableAutoConfiguration + @ComponentScan 三个配置。
例如:
@SpringBootApplication
/*@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.jamy.song.demo")*/
public class SpringThreadApplication {public static void main(String[] args) {SpringApplication.run(SpringThreadApplication.class, args);}
}
2. @EnableAutoConfiguration(作用在启动类上)
SpringBoot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置Spring应用。
例如,如果classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。
也可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们
3. @ComponentScan(作用在启动类上)
表示将该类自动发现扫描组件,可以指定扫描范围。如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。当使用@ComponentScan注解搜索beans,结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类.
例如:
//@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.jamy.song.demo")
public class SpringThreadApplication {public static void main(String[] args) {SpringApplication.run(SpringThreadApplication.class, args);}
}
4. @Configuration(作用在启动类上、配置类上)
相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
例如:
@Configuration
/*@MapperScan(basePackages = "com.jamy.song.demo.dao",sqlSessionFactoryRef = "sqlSessionFactory"
)*/
@PropertySource(value="classpath:jdbc.properties")
public class MyDataSource {private static ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();@Value(value="${db.username}")private String username;@Value(value="${db.password}")private String password;@Value(value="${db.url}")private String url;@Value(value="${db.driverClassName}")private String driverClassName;@Value(value="${db.jdbcType}")private String jdbcType;@Beanpublic DruidDataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername(username);dataSource.setPassword(password);dataSource.setUrl(url);dataSource.setDriverClassName(driverClassName);dataSource.setDbType(jdbcType);return dataSource;}@Beanpublic FactoryBean<SqlSessionFactory> sqlSessionFactory() throws IOException {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(this.dataSource());factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));return factoryBean;}public DataSourceTransactionManager transactionManager(){DataSourceTransactionManager txMgr = new DataSourceTransactionManager();txMgr.setDataSource(this.dataSource());return txMgr;}
}
5. @Controller(作用在控制器类上)
用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping
例如:
@Controller
public class DemoController {@Autowiredprivate JobLauncher jobLauncher;@Autowiredprivate Job userJob;@RequestMapping("/queryUser")@ResponseBodypublic String queryUser() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {JobParameters jobParameters = new JobParametersBuilder().addDate("date", new Date()).toJobParameters();jobLauncher.run(userJob, jobParameters);return "success";}
}
6. @RestController(作用在控制器类上)
用于标注控制层组件(如struts中的action),是@ResponseBody + @Controller的合集。
7. @Service((作用在服务(业务)类上))
一般用于修饰service层的组件
8. @Repository(作用在类上)
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项
9. @Component(作用在类上)
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
例如:
@Component
@StepScope
public class MyListener implements StepExecutionListener {Map<String, JobParameter> parameters;@Overridepublic void beforeStep(StepExecution stepExecution) {parameters = stepExecution.getJobParameters().getParameters();}@Overridepublic ExitStatus afterStep(StepExecution stepExecution) {return null;}public Map<String, JobParameter> getParameters(){return parameters;}
}
10. @Bean(作用在方法上)
用@Bean标注方法等价于XML中配置的bean,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
例如:
@Configuration
@EnableBatchProcessing
public class UserBatchDemo {private Logger logger = LoggerFactory.getLogger(UserBatchDemo.class);@Autowiredprivate JobBuilderFactory jobBuilderFactory;@Autowiredprivate StepBuilderFactory stepBuilderFactory;@Autowiredprivate UserDao dao;@Autowiredprivate MyListener listener;@Beanpublic Job userJob(){return jobBuilderFactory.get("userJob").incrementer(new RunIdIncrementer()) //设置job的id保证每一次执行都是唯一的(可重复执行).flow(userStep()).end().build();}@Beanpublic Step userStep() {return stepBuilderFactory.get("userStep").listener(listener).<User, User>chunk(1).reader(userRead()).writer(new UserWriter()).build();}@Bean@StepScopepublic UserItemReader userRead() {System.out.println(listener.getParameters());List<User> list = dao.queryUser();return new UserItemReader(list);}
}
11. @AutoWired(作用在属性上)
自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。和@Resource用法差不多,只不过它是按类型注入的
例如:
@Service
public class UserService {@Autowiredprivate Schedule schedule;@Autowiredprivate UserDao userDao;ExecutorService executorService = Executors.newFixedThreadPool(10);public void addUser(JSONObject jsonObject){schedule.setProperties(userDao, jsonObject);executorService.submit(schedule);}
}
12. @Resource(name=”name”,type=”type”,作用在属性上)
没有括号内内容的话,默认按byName注入。与@Autowired作用差不多。
13. @Qualifier(作用在属性上)
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
例如:
@Service
public class UserService {@Autowired@Qualifier(value="schedule")private Schedule schedule;@Autowiredprivate UserDao userDao;ExecutorService executorService = Executors.newFixedThreadPool(10);public void addUser(JSONObject jsonObject){schedule.setProperties(userDao, jsonObject);executorService.submit(schedule);}
}
14. @RequestMapping(作用在方法上)
提供路由信息,负责URL到Controller中的具体函数的映射
例如:
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("addUser")@ResponseBodypublic String addUser() {JSONObject jsonObject = new JSONObject();jsonObject.put("name", "zhangsan");jsonObject.put("age", 21);jsonObject.put("address", "上海市浦东新区松涛路80号");userService.addUser(jsonObject);return "hello world";}}
15. @ResponseBody(作用在方法上)
表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用
例如:
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("addUser")@ResponseBodypublic String addUser() {JSONObject jsonObject = new JSONObject();jsonObject.put("name", "zhangsan");jsonObject.put("age", 21);jsonObject.put("address", "上海市浦东新区松涛路80号");userService.addUser(jsonObject);return "hello world";}}
16. @Import
用来导入其他配置类。
17. @ImportResource
用来加载xml配置文件
18. @PropertySource(作用在类上)
用来加载application.properties外的普通配置文件,例如jdbc.properties
例如:
@Configuration
@PropertySource(value="classpath:jdbc.properties")
public class MyDataSource {private static ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();@Value(value="${db.username}")private String username;@Value(value="${db.password}")private String password;@Value(value="${db.url}")private String url;@Value(value="${db.driverClassName}")private String driverClassName;@Value(value="${db.jdbcType}")private String jdbcType;@Beanpublic DruidDataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername(username);dataSource.setPassword(password);dataSource.setUrl(url);dataSource.setDriverClassName(driverClassName);dataSource.setDbType(jdbcType);return dataSource;}@Beanpublic FactoryBean<SqlSessionFactory> sqlSessionFactory() throws IOException {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(this.dataSource());factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));return factoryBean;}public DataSourceTransactionManager transactionManager(){DataSourceTransactionManager txMgr = new DataSourceTransactionManager();txMgr.setDataSource(this.dataSource());return txMgr;}}
19. @Value(作用在属性上)
注入Spring boot application.properties配置的属性的值
例如:
@Configuration
/*@MapperScan(basePackages = "com.jamy.song.demo.dao",sqlSessionFactoryRef = "sqlSessionFactory"
)*/
@PropertySource(value="classpath:jdbc.properties")
public class MyDataSource {private static ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();@Value(value="${db.username}")private String username;@Value(value="${db.password}")private String password;@Value(value="${db.url}")private String url;@Value(value="${db.driverClassName}")private String driverClassName;@Value(value="${db.jdbcType}")private String jdbcType;@Beanpublic DruidDataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername(username);dataSource.setPassword(password);dataSource.setUrl(url);dataSource.setDriverClassName(driverClassName);dataSource.setDbType(jdbcType);return dataSource;}
}
20. @Inject
等价于默认的@Autowired,只是没有required属性
21. @PathVariable(作用在属性上)
获取参数
22.@Mapper
用来注解数据持久化接口(dao接口)
例如:
@Mapper
public interface UserDao {List<User> queryUser();
}
23. @MapperScan
用来扫描数据持久化接口包(dao包)
例如:
@SpringBootApplication
@EnableScheduling
@MapperScan(basePackages = "com.jamy.song.demo.dao",sqlSessionFactoryRef = "sqlSessionFactory"
)
public class ApplicationDemo {public static void main(String[] args) {SpringApplication.run(ApplicationDemo.class, args);}
}
Spring注解(包含SpringBoot)相关推荐
- 注解整理 - 元注解,lombok注解,spring 注解,springboot注解,springmvc注解
注解大全 java四种元注解 @Target @Retention @Documented @Inherited lombok注解 lombok注解为什么强大 lombok注解的使用方式 1.安装lo ...
- Spring注解之@validated的使用
Spring注解之@validated的使用 spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 比如,我们判断一个输入参数是否合法,可 ...
- Spring注解之@Import用法解析
前言:最近在回顾阅读Springboot源码时发现框架层面大量使用@Import注解,特别是Springboot自动装配机制更是大量使用该注解,搜索部分结果图如下.简单来说就是Springboot中用 ...
- Spring注解驱动
文章目录 SpringBoot注解驱动 SpringBoot的事件监听 关于Spring *PostProcessor的总结 几种*Aware反注入的实现 SpringBoot注解驱动 SpringB ...
- Spring注解开发学习笔记
1 IOC 1.1 工厂模式 使用工厂中方法代替new形式创建对象的一种设计模式 1.2 Inversion of Control控制翻转 一种思想,用于消减代码间的耦合. 实现思想:利用工厂设计模式 ...
- Spring全家桶--SpringBoot
SpringBoot 一.SpringBoot入门 1.1 什么是SpringBoot 1.2 SpringBoot优缺点 1.3 SpringBoot快速入门 1.3.1 通过Maven导入依赖 1 ...
- Spring注解大全(史上最全,字母编号,有实例)
目录 A @Accessors 链式编程使用.需要搭配@Getter和@Setter使用.主要有三个参数: 序号 参数名 介绍 1 chain 链式 2 fluent 流式(若无显示指定chain的值 ...
- 项目从Spring转到SpringBoot Migrating from Spring to Spring Boot
原文链接:Migrating from Spring to Spring Boot 1. Overview 概述 In this article, we're going to take a look ...
- SPRING注解驱动开发-雷神课程超详细笔记
SPRING注解驱动开发-雷神课程超详细笔记 时间:2021-03-21 2022-04-06更新:最近翻起一年多前写的笔记复习,还是收获颇多,很多当时无法理解的知识现在慢慢能理解了,可能是工作一年的 ...
- Spring注解开发【源码分析】
一.注册组件 @ComponentScan 扫描指定包下的组件. String[] value():扫描基础包范围 Filter[] includeFilters():扫描并获取符合过滤规则的组件 F ...
最新文章
- Mysterious Bacteria LightOJ - 1220[唯一分解定理+思维题]
- 推荐:微服务架构的深度解析!
- Java并发编程(2):线程中断(含代码)
- Matlab坐标轴中的希腊字母
- 理解几个网络硬件(调制解调器、路由器、交换机)的基本作用
- 1976年,提出公钥密码体制概念的学者
- delphi开发LINUX程序,DELPHI开发LINUX包
- Java工作笔记-Spring Boot中使用Mybatis操作达梦数据库
- nginx的模块化体系结构
- javascript 自动完成下拉框
- python中pandas库里的read_table和read_csv的区别
- java源码编译_java 源码编译
- 因子分解机(FM,FFM,DeepFM,libfm,xlearn)
- mysql主从怎么确保数据一致_如何保证主从复制数据一致性
- httpd三种MPM的原理剖析
- router 路由守卫
- 苹果电脑网速怎么测试软件,macbookpro怎么检测网速?
- JDK参考文档的使用
- 电影解说的配音都是真人配音吗?
- 天玥运维安全网关_中国工业网络安全厂商综合能力概览