[Spring实战系列]
来源:互联网 发布:linux 电池驱动 编辑:程序博客网 时间:2024/06/06 01:47
在这篇文章中,我主要是给大家讲解一下我们上一篇文章所涉及的Spring注解的用法以及一些常见的Spring用法。
在这里,我贴出Spring官方的docs,英语好的朋友可以直接忽略本文章查看纯正的英文注解。
1. @Configuration:
@Configuration最常用的功能就是和@Bean一起配合所使用,来减少我们在Spring配置Bean过程中的工作。还记得我们之前使用xml配置Bean过程么?假如,我们有个Bean A,我们需要首先将A构造为一个Java的类,然后再xml文件中,利用<bean id=""...></bean>之类的标签来配置这个类。注解的功能就是删去我们之前繁重的XML配置。
假如我们有MyBean这个类需要设置为Bean
@Configuration public class AppConfig { @Bean public MyBean myBean() { // instantiate, configure and return bean ... } }这样,我们就在构建AppConfig类的同时,利用两个注解完成了上述所有的内容。使用的过程也稍不同。我们使用了注解配置应用上下文:AnnotationConfigWebApplicationContext。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(AppConfig.class); ctx.refresh(); MyBean myBean = ctx.getBean(MyBean.class); // use myBean ...
在之前的项目中,我们还是用到了@Configuration的两个功能:和@Import()配合使用和@ComponentScan()配合使用。a.和@Import配合使用:
@Import这要是为了在@Configuration的类B中引入一个其他的配置类A。在我们在注册配置类B的时候,可以同时注册到类A。如下示例:
@Configuration public class DatabaseConfig { @Bean public DataSource dataSource() { // instantiate, configure and return DataSource } } @Configuration @Import(DatabaseConfig.class) public class AppConfig { private final DatabaseConfig dataConfig; public AppConfig(DatabaseConfig dataConfig) { this.dataConfig = dataConfig; } @Bean public MyBean myBean() { // reference the dataSource() bean method return new MyBean(dataConfig.dataSource()); } }现在,我们只需要用AnnotationConfigApplicationContext来注册AppConfig,AppConfig和我们引入的DatabaseConfig可以同时被引导。
new AnnotationConfigApplicationContext(AppConfig.class);是不是在@Configuration内部定义的@Import和@Configuration都会被自动的注册呢?答案是Yes!
例如下面的代码,DatabaseConfig会自动注册,如果我们使用上面提到的方法来注册AppConfig。
@Configuration public class AppConfig { @Inject DataSource dataSource; @Bean public MyBean myBean() { return new MyBean(dataSource); } @Configuration static class DatabaseConfig { @Bean DataSource dataSource() { return new EmbeddedDatabaseBuilder().build(); } } }
b.和@ComponentScan()配合使用:
@ComponentScan()用于替代<context:component-scan>,以为扫描我们配置所需的所有包(包括子包),将组件注解的类(我们下面提到的@Component之类的)添加到Spring容器,同时使一些@Autowired之类的注解生效。
2.@Bean:
@Bean,就是我们之前xml文件中最简单的<bean>标签的注解形式,标记一个类为Bean。同时,@Bean也可以通过以下办法实现<bean>标签中的 name() 和scope()
@Bean({"b1", "b2"}) // bean available as 'b1' and 'b2', but not 'myBean' public MyBean myBean() { // instantiate and configure MyBean obj return obj; }
@Bean @Scope("prototype") public MyBean myBean() { // instantiate and configure MyBean obj return obj; }
3.@Component:
将一个类注解为组件。当我们使用基于注解的扫描的时候,这样的类可以视为候选组件。一般我们不单纯的使用@Component,而是使用具体的组件注解:@Repository,@Service, @Controller
a.@Repository:
将一个类标记为数据持久层。简单的说,就是将一个类标识为DAO,用于数据库的访问。类似我们之前的:
@Repositorypublic class JdbcSpittleRepository implements SpittleRepository { private JdbcOperations jdbc; @Autowired public JdbcSpittleRepository(JdbcOperations jdbc) { this.jdbc = jdbc; } //........}
用法也很清楚。我们首先定义数据库访问的接口,然后使用@Repository注解DAO组件,继承接口,实现功能。b.@Service:
标记一个类为业务层组件,用于注入DAO。方法同上
c.@Controller:
用于标记控制层组件,用于注入服务,方法同上。
4.@Autowired:
通过使用Spring依赖注入设备,使一个构造函数,一段作用域,一个setter方法,或者config方法自动被自动装配。@Autowired有点类似我们在Bean那篇文章中的按照类型装配。如果是按照名称装配可以使用@Qualifier。
5.RequestMapping:
用于映射相应跳转url,含有很多元素,如value,method,consumes等。其中:
value:指定请求的地址。
method:制定请求的方法类型,如POST,GET,PUT,DELETE。
@RequestMapping(value="/new", method = RequestMethod.GET) public AppointmentForm getNewForm() { return new AppointmentForm(); }
在我们之前的项目里面,用到的主要的注解也就是上述这些。还有一些比较显而易懂的注解这里没有展示出来。
P.S. 文章不妥之处还望指正
- Spring实战系列
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring Boot实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring实战系列]
- [Spring Boot实战系列]
- [Spring Boot实战系列]
- [Spring Boot实战系列]
- Spring Boot实战系列教程
- 【Spring Security实战系列】Spring Security实战(一)
- Android Support Design 库 之 Snackbar使用及源码分析
- lianliankan
- 前端到node后台的十万个啥东西,综合指南针!
- 第十一讲项目五 坐标转换
- Javascript 函数声明和函数表达式的区别
- [Spring实战系列]
- iOS swift webview下拉刷新
- 微信APP支付-Java后台实现
- 信号与系统学习笔记1——离散时间复指数序列的周期性质
- Android Studio不显示logcat日志的解决办法
- 在解压tar.gz文件的时候报错
- Android MVVM结合DataBinding的简单实用(Android studio)及自己遇到的坑
- RNA_Seq差异表达分析流程
- Android动画学习总结