Spring学习笔记---2.2-基于注解的配置

来源:互联网 发布:淘宝无法举证 编辑:程序博客网 时间:2024/06/04 19:29
一、使用注解定义Bean:

       无论采用的是xml 还是注解的形式,他们都是Bean 定义的载体,其目的都是为Spring容器提供Bean定义的信息,Spring从2.0 开始引入基于注解的配置方式。
   
       Spring 容器成功启动有三大要件:1、Bean定义信息;
                                                        2、Bean实现类;
                                                        3、Spring本身;
        如果采用的是XML的配置方式,那么Bean定义信息和Bean 实现类本身是分离的,但是如果采用的是注解的方式,则只需要在Bean的实现类上标注上注解即可。无论采用什么的方式,这里都是定义Bean信息,将Bean的信息,Bean与其实现类之的依赖关系,告诉Spring容器,Spring容器对Bean进行创建,依赖关系进行创建并销毁等。
   
       那么在什么样的情况下采用什么样的注解?
       如下代码:
             
       看到页面标红处,使用@Component注解在UserDao 类声明处对类标注,它可以被Spring容器识别,Spring容器自动将POJO转换为容器管理的Bean;
       上面代码的注解和以下XML文件中配置的效果等同:
        <bean id = "userDao" class="com.smart.UserDao"/>
        除了@Component 以外,Spring 提供了如下3个功能和@Component等效的注解,他们分别用于对Dao、Service以及web层的Controller进行注解,如下(加上@Component 方便记忆):
  •  @Repository :用于对Dao实现类Dao的实现类,而不是接口类进行标注;
  •  @Component :用于对Dao实现类(Dao的实现类,而不是接口类)进行标注;
  •  @Service : 用于对Service的实现类(Service的实现类,而不是接口类)进行标注;
  •  @Controller: 用于对Controller 实现类(就是Controller类)进行标注;

        以上能够清晰的看到不同的分层的类的注解也不同,但是在一个项目中终会有很多其他的类的,Spring也定了一些特殊的注解,用来注解特殊的Bean。


使用了注解的Bean之后,要容器加载,解析这些Bean的前提是能够扫描到容器中,Spring提供了一个工具:
        
    使用<context:component-scan  base-package=""/>
    使用上面的这个扫描器的时候,我们在项目中一般情况下是扫描所有Java类;如<context:component-scan  base-package="com.smart.*"/>

    
二、自动装配Bean:

       Spring 通过@Autowired注解实现Bean的依赖注入,如:
         
        代码中@Autowired就是在LoginController中注入UserService;
        @Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。
         注意一点:该注入@Autowired的默认值是@Autowired(required=true);这句话的意思是在查找这个Bean的时候,在@Autowired下面的这个类是必须要存在的,如果找不到,则会抛出NoSuchBeanDefinitionException异常;
         如果希望即使找不到也不报错,那就在@Autowired后面加上(required=false);  

         总结如下@Autowired(required=true); 需要标注的Bean存在,如不存在会报错;
                      @Autowired(required=false);标注的Bean可以不存在,不存在也不会报错。

         Spring还提供了几种其他的配置方式,但是在项目开发中实际使用的比较少,一般情况下,XML配置数据源,sessionFactory等资源的Bean,在XML中利用aop、context 命名空间进行相关主题的配置。其他开发中Bean,对通过基于注解配置的方式进行配置。


三、 小结:
         控制反转包含两层意思:“控制”是接口实现类的控制权,而“反转”指的是这种选择控制权从调用类转移到外部容器或者是第三方的类中。
         BeanFactory、ApplicationContext和WebApplicationContext 是Spring 框架3个最核心的接口。 
         Spring 提供了5个Bean 作用范围,在web应用环境下,可以使用request、session和globalSession 的Bean作用域。
         使用@Component 和@@Repository、@Service 、@Controller 等配置@Autowired 就可以很好的使用基于注解的方式进行Bean的定义和注入,这种方式比XML 文件通过<bean>提供的配置更加简单。

     
0 0
原创粉丝点击