[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. 文章不妥之处还望指正












0 0
原创粉丝点击