2012-02-22 39 views
37

Các lớp trừu tượng không thể được khởi tạo trong java. Nhưng mùa xuân nói một cái gì đó giống như tạo đậu với abstract="true". Nếu trạng thái của một lớp trừu tượng được khởi tạo chỉ bởi thể hiện lớp con của nó (tôi đoán tôi là đúng), thì nếu tôi cần sử dụng thuộc tính đó bên trong phương thức được định nghĩa trong lớp trừu tượng thì ... có khả năng nó? Tôi có một bộ mã như sau:Ý nghĩa của abstract = "true" trong mùa xuân là gì?

class abstract A { 
    private Something somethingObj; 
    // getters and setters are present. 

    public void logSomething() { 
     try{ 
      //some code which throws exception 
     } 
     catch(Exception e){ 
      somethingObj.logIt(e);// I have some logic inlogIt method. 
     } 
    } 
} 

Trả lời

83

Đậu trừu tượng trong mùa xuân hơi khác với lớp trừu tượng. Trong thực tế, bean trừu tượng trong Spring thậm chí không cần phải được ánh xạ tới bất kỳ lớp nào. Thực hiện việc này như một ví dụ:

<bean id="dao" abstract="true"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="someHelper" ref="someHelper"/> 
</bean> 

<bean id="fooDao" class="FooDao" parent="dao"> 
    <property name="fooHelper" ref="fooHelper"/> 
</bean> 
<bean id="barDao" class="BarDao" parent="dao"> 
    <property name="barHelper" ref="barHelper"/> 
</bean> 

Và lớp:

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 
} 

Lưu ý rằng FooDaoBarDao không có bất kỳ cha mẹ (trừu tượng hay không) lớp cơ sở chung. Định nghĩa bean trừu tượng mẹ chỉ được sử dụng cho các thuộc tính chung nhóm, vì vậy bạn tránh lặp lại trong XML.

Mặt khác giới thiệu tóm tắt Dao lớp mà cả FooDaoBarDao kế thừa từ sẽ là một ý tưởng tốt:

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 
} 

Nhưng vẫn dao đậu không phải xác định một lớp. Hãy coi đậu trừu tượng như một cách để giảm trùng lặp trong XML khi một số hạt bê tông có cùng phụ thuộc.

+0

cần lưu ý rằng hạt trừu tượng không được instanciated bởi Spring –

0

Thực ra, bean mẹ trừu tượng không cần thiết để xác định thuộc tính lớp, bạn có thể chỉ cần một thuộc tính chung để chia sẻ.

Theo tutorial

bean phụ huynh này không thể được khởi tạo ngày của riêng mình bởi vì nó là không đầy đủ, và nó cũng được đánh dấu một cách rõ ràng như trừu tượng. Khi định nghĩa trừu tượng như thế này, thì chỉ có thể sử dụng như một định dạng thuần mẫu làm định nghĩa gốc cho định nghĩa con .