在春天中基于Java类进行配置的完整步骤

  

  

JavaConfig原来是春天的一个子项目,它通过Java类的方式提供Bean的定义信息,在Spring4的版本,JavaConfig已正式成为Spring4的核心功能。

  

本文将详细介绍关于春天中基于Java类进行配置的相关内容、下面话不多说了,来一起看看详细的介绍吧

  

  

普通的POJO只要标注了@ configuration注解,就可以春天为容器提供Bean的定义信息。

        @ configuration   公开课SystemConfig {/* *   *定义Bean,并实例化   *   * @return   */@ bean   公共UserDao UserDao () {   返回新UserDao ();   }      @ bean   公共DeptDao DeptDao () {   返回新DeptDao ();   }/* *   *定义UserService,并把之前定义的UserDao与DeptDao注入进的来   *   * @return   */@ bean   公共UserService UserService () {   UserService服务=new UserService ();   service.setUserDao (userDao ());   service.setDeptDao (deptDao ());   返回服务;   }   }      

这个类的方法标注了@ Bean注解,即为定义Bean, Bean的类型由方法返回值的类型决定,名称默认和方法名同名,也可以通过入参显示指定Bean名称,比如@ Bean (name=" xxx ")。@ Bean所标注的方法体提供了实例化Bean的逻辑。

  

以上配置和下面的xml是等效的:

        & lt; bean id=皍serDao”类=皀et.deniro.spring4.conf.UserDao”/比;   & lt; bean id=癲eptDao”类=皀et.deniro.spring4.conf.DeptDao”/比;   & lt; bean id=皍serService”类=皀et.deniro.spring4.conf.UserService”   p: userDao-ref=" userDao " p: deptDao-ref=癲eptDao”/祝辞      

基于Java类的配置方式和基于XML或者基于注解的配置方式相比,

  
      <李> Java类的配置方式通过代码编程的方式,可以更加灵活地实例化Bean和装配豆之间的关系。   <李> XML或者基于注解的方式都是通过声明来定义配置的,所以灵活性上要逊一些,但在配置上更简单。   
  

因为@ configuration注解类本身已经标注了@ component,所以这些类可以像那些普通的Bean一样被注入到其他的Bean中。

        @ configuration   公开课ApplicationConfig {   @ autowired   私人SystemConfig SystemConfig;   @ bean   公共AuthorityService AuthorityService () {   AuthorityService服务=new AuthorityService ();   service.setUserDao (systemConfig.userDao ());   service.setDeptDao (systemConfig.deptDao ());   返回服务;   }   }      

春天会对配置类中所有标注了@ Bean的方法使用AOP增强,引入Bean的生命周期管理逻辑。比如上面的systemConfig.userDao(),它返回的是对应Bean的单例。

  @ Bean中,

在我们还可以通过标注@Scope注解来控制Bean的作用范围:

        @Scope(“原型”)   @ bean   公共DeptDao DeptDao () {   返回新DeptDao ();   }      

这样每次调用deptDao()方法都会返回一个新的实例:

        assertNotSame (authorityService.getDeptDao () .hashCode (), authorityService   .hashCode .getDeptDao () ());      

注意:使用基于Java类进行配置,类路径下必须有Spring AOP与CGLib库。

  

  

<强> 2.1只使用@ configuration类

  

可以使用所类的构造函数传入标注了@ configuration的Java类来启动春容器。

     =新所(SystemConfig ApplicationContext上下文   . class);   UserService UserService=(UserService) context.getBean (“UserService”);   assertNotNull (userService);      

如果存在多个@ configuration配置类,那么可以所中注册它们,然后再通过刷新容器应用这些配置类:

        所上下文=new所();//注册多个配置类   context.register (SystemConfig.class);   context.register (ApplicationConfig.class);//刷新容器(应用这些配置类)   context.refresh ();      ApplicationConfig配置=context.getBean (ApplicationConfig.class);    assertNotNull(配置);      

也可以通过@ import将多个配置类组装到一个配置类中,然后仅需注册这个组装好的配置类,即可启动容器:

        @ configuration   @ import (SystemConfig.class)   公开课ApplicationConfig2 {   @ autowired   私人SystemConfig SystemConfig;   @ bean   公共AuthorityService AuthorityService () {   AuthorityService服务=new AuthorityService ();   service.setUserDao (systemConfig.userDao ());   service.setDeptDao (systemConfig.deptDao ());   返回服务;   }   }

在春天中基于Java类进行配置的完整步骤