SSM应用(二)--注解的使用

注解的概念

  传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
    如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低。
    在开发中在.java文件和.xml文件之间不断切换,是一件麻烦的事,同时这种思维上的不连贯也会降低开发的效率。
  为了解决这两个问题,Spring引入了注解,通过"@XXX"的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。

 

基于组件的注解

  @Component:组件,标注一个普通的Spring bean类,取代了配置文件中的<bean id=”” class=””></bean>配置项;@Component是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。如:

  

  @Controller:控制器组件,针对于MVC中的C层,标注一个控制层的类(servlet);使用@Controller注解标识UserServlet之后,就表示要把UserServlet交给Spring容器管理,在Spring容器中会存在一个名字为"userServlet"的servlet,这个名字是根据UserServlet类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserServlet")】或者【@Controller("userServlet")】,则使用value作为bean的名字,如:

  

  @Service:业务层组件,标注一个service层的类;@Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Servlet需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Servlet:在Servlet只需要声明一个名字叫"userService"的变量来接收由Spring注入的"userService"即可,具体代码如下:

  

  

  @Repository:数据层组件,标注一个dao层的类;@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫"userDao"的UserDaoImpl实例。当Service需要使用Spring创建的名字叫"userDao"的UserDaoImpl实例时,就可以使用注解告诉Spring,Spring把创建好的userDao注入给Service即可。

  

  

 

属性注入、建立bean之间关系用到的注解

  @Autowire:根据类型自动装配,可以和@Qualifier配合使用;其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。

  @Qualifier:根据指定名称装配,属性名去找有没有对应的beanID,如果有就自动匹配,如:

  

  @Resource:按名称装配,如果找不到与名称匹配的bean,则按类型装配;装配步骤如下:

    @Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配

    指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

  然后,区分一下@Autowired和@Resource两个注解的区别:

    @Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    @Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
  Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

  

  @Value:给基本属性赋值,如:

  

 

关于扫描的注解

  @Configuration:配置注解

  @ComponentScan:配置要扫描的包,零配置

  

 

注:扫描注解后,所有的bean都存放在Spring容器中,根据属性注入的注解,再去Spring的内存中寻找是否有名称匹配或者类型匹配的bean,自动将该bean与属性建立关系

 

PS:因作者能力有限,如有误还请谅解

posted @ 2018-04-20 13:17  IVEGOTNOIDEA  阅读(706)  评论(0编辑  收藏  举报