![](/img/trans.png)
[英]get <aop:scoped-proxy/> that is session scoped inside of a jsp
[英]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一起使用”
如果您的主要目的是為屬性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.