2010-10-08 35 views
29

Có cách nào để sử dụng phương pháp tra cứu phương pháp tra cứu bằng cách sử dụng chú thích không?Làm thế nào để làm phương pháp tra cứu mùa xuân tiêm với chú thích?

Với lớp sau đây:

@Service 
public abstract class A { 


    protected abstract createB(); 

} 

Để có được nó để làm việc tôi phải khai báo vào mùa xuân applicationContext.xml sau:

<bean id="b" class="com.xyz.B"> 
</bean> 

<bean id="a" class="com.xyz.A"> 
    <lookup-method name="createB" bean="b"/> 
</bean> 

Mặc dù tôi đang sử dụng <context:component-scan base> Tôi có để khai báo nó trong XML. Không phải là một cách tiếp cận tốt tôi nghĩ.

Cách thực hiện bằng chú thích?

Trả lời

28

Có thể sử dụng javax.inject.Provider. Tất cả cảm ơn, hãy truy cập Phil Webb.

public class MySingleton { 

    @Autowired 
    private Provider<MyPrototype> myPrototype; 

    public void operation() { 
    MyPrototype instance = myPrototype.get(); 
    // do something with the instance 
    } 

} 
+1

Cũng xin lưu ý câu trả lời về @Lookup dưới đây - có thể với Spring 4.1 ot sau này để sử dụng chú thích. Mặc dù tôi nghĩ rằng các nhà cung cấp là sạch hơn và ít khó hiểu trong khi đọc mã. – Tarion

13

Chỉ được triển khai với Spring> = 4.1 Xem ticket.

+1

Trong Spring Framework 4.1, nó có sẵn dưới dạng chú thích \ @Lookup. Xem câu trả lời của @ Danny-Dan. – HairOfTheDog

+0

Cảm ơn, udpated câu trả lời của tôi cho phù hợp –

17

Cũng có thể với org.springframework.beans.factory.ObjectFactory nếu bạn muốn theo kịp với mùa xuân API

public class MySingleton { 

    @Autowired 
    private ObjectFactory<MyPrototype> myPrototypeFactory; 

    public void operation() { 
    MyPrototype instance = myPrototypeFactory.getObject(); 
    // do something with the instance 
    } 
} 

bạn có thể đọc thêm trong documentation.

10

Cuối cùng được giới thiệu là chú thích @Lookup. Đây là discussion về cách sử dụng.

+0

Chú thích @Lookup yêu cầu Spring 4.1 trở lên – HairOfTheDog

Các vấn đề liên quan