Spring抽象bean abstract=true宣言

1948 ワード

  • Javaの抽象クラスはインスタンス化できないため、beanを登録することはできませんが、beanを登録するときに属性abstractをtrueと指定すると、beanは抽象beanと宣言され、インスタンス化されませんが、その属性は他のbeanに注入できます.
  • 抽象beanは、クラスにマッピングする必要もありません.
  • 抽象beanの1つの利点は、テンプレートを作成できることです.たとえば、2つのクラスに同じいくつかの属性が含まれている場合、xmlプロファイルでは、これらの属性を2回の繰り返し操作で注入する可能性があります.抽象beanを定義すると、この問題はよく解決されます.
  • //         (      )
    public class FooDao {
        private DataSource dataSource;
        private SomeHelper someHelper;
        private FooHelper fooHelper;
    
        //setters
    }
    public class BarDao {
        private DataSource dataSource;
        private SomeHelper someHelper;
        private BarHelper barHelper;
    
        //setters
    }
    
    //xml    bean(        bean)
     
        
        
    
    
     
    
        
    
    
        
    
    
  • ただし、両方のクラスが継承できる抽象Daoクラスを導入することで、クラス定義時の属性宣言コード
  • を節約することもできる.
    //  Dao 
    public abstract Dao {
        protected DataSource dataSource;
        protected SomeHelper someHelper;
    
        //setters
    }
    
    //         
    public class FooDao extends Dao {
        private FooHelper fooHelper;
    
        //setters
    }
    public class BarDao extends Dao {
        private BarHelper barHelper;
    
        //setters
    }
    
  • xmlプロファイルは
  • に変わりません.
  • 抽象beanはインスタンス化を必要としないため、class属性は一般的に指定されない.
  • しかし、抽象bean Daoはclass属性を指定し、あるクラスにマッピングすることもできます.子bean FooDaoがclass属性を指定していない場合、Springは親bean Daoのclassを見つけ、子beanをDaoクラスインスタンスにインスタンス化するので、ここでのDaoは抽象クラスではありません.
  • すなわち、抽象beanのマッピングクラスは必ずしも抽象クラスではない.抽象beanの「抽象」はもともと抽象クラスの意味ではなく、私たちが文生を望んでいるからだ.
  • 参考文書
  • コード例:ideaProjects/shirochapter 12/resources/spring-beans.xml