หน้าเว็บ

วันพฤหัสบดีที่ 20 กันยายน พ.ศ. 2555

การ autowired service spring แบบระบุ (specific) service : java

        ปกติเวลาเราจะเรียกใช้งาน service หนึ่งๆ ของ spring เราจะเรียกใช้ผ่าน interface ของ service นั้นๆ แทนการเรียกใช้ implementation ซึ่งก็คือตัว service จริงๆ นั่นเอง
        ซึ่งโดยปกติแล้ว  เวลาเราเขียนมักจะเป็น 1 interface ต่อ 1 implementation   เมื่อต้องการเรียกใช้งาน service ใด  เราก็จะเรียกผ่าน interface ของมันแทน ด้วยการ @Autowired interface นั้นๆ เข้ามา  ในกรณีนี้ไม่มีปัญหาอะไร  เพราะเป็นแบบ 1 : 1   แล้วถ้าเป็น 1 : M แบบนี้ล่ะ
//interface
public interface Service{
    public Page findAllElementsByPaging(Pageable page);
}

//implementatoin
@Service("documentService")
@Transactional(propagation = Propagation.REQUIRED)
public class DocumentService implements Service{//********
    
    @Override
    public Page findAllElementsByPaging(Pageable page){
        ...
        ...
        ...
    }
}

@Service("binaryService")
@Transactional(propagation = Propagation.REQUIRED)
public class BinaryService implements Service{//*********
    
    @Override
    public Page findAllElementsByPaging(Pageable page){
        ...
        ...
        ...
    }
}

...
...
...
        เราจะเห็นได้ว่า inteface Service นั้น ถูก implements ไปเป็น DocumentService กับ BinaryService ซึงเป็นแบบ 1 : M
        ถ้าเราต้องการเรียกใช้งาน Service ใด  ในตอนที่ @Autowired Service นั้นให้เราระบุ implementation ที่ต้องการลงไปด้วย  เพื่อที่จะได้ไม่ทำให้เกิดปัญหาเวลา run application เพราะ spring จะถือว่า Service คือ Singleton สามารถมีได้แค่อันเดียวเท่านั้น  การเรียกใช้  ทำได้ดังนี้
...
...
...
    @Autowired
    @Qualifier("documentService")//********
    private Service service; //service ตัวนี้  จะทำงานเป็น DocumentService
...
...
...

        แค่นั้นก็เรียบร้อยโรงเรียนวัดศาลาลอยครับ ^_______________^

1 ความคิดเห็น: