簡體   English   中英

使用Spring需要澄清: <aop:scoped-proxy/>

[英]clarification needed for use of Spring: <aop:scoped-proxy/>

我正在春季學習標簽的使用。 我寫了一個簡單的編。

    <bean id="book" class="com.test.scoped.Book" scope="prototype" >
    <property name="name" value="DefaultName"></property>
         <aop:scoped-proxy/> 
    </bean>

    <bean id="reader" class="com.test.scoped.Reader" >
        <property name="book" ref="book" />
    </bean>


public class Book {

    private String name;

    public String toString (){
        return this.name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


class Reader {
    private Book book;

    public Book getBook() {
        return book;
    }

    public void setBook(Book book) {
        this.book = book;
    }

}


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ApplicationContext ctx = new ClassPathXmlApplicationContext("ScopedProxy.xml");

        Book firstBook  = ((Reader)ctx.getBean("reader")).getBook();
        System.out.println("First Book : "+firstBook.getName());
        firstBook.setName("Edge of Eternity");
        System.out.println("First Book : "+firstBook.getName());

        Book secondBook = ((Reader)ctx.getBean("reader")).getBook();
        System.out.println("Second Book : "+secondBook.getName());
    }

}

當我運行Main class時,我得到以下結果:

First Book : DefaultName

First Book : DefaultName

Second Book : DefaultName

我的問題,即使我已經設置了firstBook的名稱,為什么還沒有設置它的名稱:firstBook.setName(“ Eternal of Eternity”); 當我刪除aop:scoped-proxy時,名稱設置正確。 為什么默認名稱沒有被覆蓋?

您不應以正在使用的方式使用作用域代理的bean。 范圍代理bean在開發-ie- webapps並將其用作單例bean的引用時很有用。

看一下Spring文檔[1]:“您不需要將<aop:scoped-proxy />與結合為單例或原型的bean一起使用”

[1] http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

如果您的主要目的是為屬性name設置default value ,那么您要做的就是

<bean id="book" class="eu.europa.ema.esubmission.psur.Book" scope="prototype" >
    <property name="name" value="DefaultName"></property>
</bean>

然后,您可以根據需要覆蓋屬性name

然后考慮aop:scoped-proxy ,它與scope=session Bean之外的其他beans完全無關。

如果要注入Session scope bean作為對其他beans依賴性,則僅應使用scoped-proxy聲明。 由於您的Book bean被定義為prototype因此不需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM