-
Bean屬性繼承
查看全部 -
Bean的初始化和銷毀
查看全部 -
Bean懶加載
查看全部 -
Bean作用域 Web環(huán)境作用域:request session application
查看全部 -
測(cè)試集中情況: 第一種:被引用bean1為單例模式,bean也為單例模式
<bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="singleton"?/> <bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="singleton"> ????<property?ref="bean1"?name="bean1"/> </bean>
第二種:被引用類bean1為多例模式,bean為單例模式 <bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="prototype"?/> <bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="singleton"> ????<property?ref="bean1"?name="bean1"/> </bean>
第三種:被引用類bean1為單例,bean為多例模式 <bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="singleton"?/> <bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="prototype"> ????<property?ref="bean1"?name="bean1"/> </bean>
第四種:被引用類bean1為多例模式,bean為多例模式 <bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="prototype"?/> <bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="prototype"> ????<property?ref="bean1"?name="bean1"/> </bean>
bean是單例模式singleton,bean1是多例模式prototype,bean依賴bean1.我們希望每次調(diào)用Bean的某個(gè)方法時(shí), 該方法拿到的Bean1都是一個(gè)新的實(shí)例,做法如下:
package?com.example.spring.ioc.class7; public?abstract?class?Bean?{ ????protected?abstract?Bean1?createBean1(); ????public?void?printBean1(){ ????????System.out.println(createBean1()); ????}}
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd"> ????<bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="prototype"?/> ????<bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="singleton"> ????????<lookup-method?bean="bean1"?name="createBean1"/> ????</bean> </beans>
package?com.example.spring.ioc.class7; import?org.junit.jupiter.api.Test; import?org.springframework.context.ApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext; public?class?BeanTest?{ ????@Test ????public?void?test(){ ????????ApplicationContext?ac?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????System.out.println("--------------------------這是第一個(gè)Spring?Context?上下文----------------------------"); ????????Bean?bean?=?ac.getBean("bean",Bean.class); ????????bean.printBean1(); ????????bean.printBean1(); ????????bean.printBean1(); ????????System.out.println("--------------------------這是第二個(gè)Spring?Context?上下文----------------------------"); ????????ApplicationContext?ac1?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????Bean?bean_1?=?ac1.getBean("bean",Bean.class); ????????bean_1.printBean1(); ????????bean_1.printBean1(); ????????bean_1.printBean1(); ????} }
實(shí)體改造前: package?com.example.spring.ioc.class7; public??class?Bean?{ ? ????public?void?printBean1(){ ????????System.out.println("bean1?=?"?+?bean1); ????} ????private?Bean1?bean1; ????public?Bean1?getBean1()?{ ????????return?bean1; ????} ????public?void?setBean1(Bean1?bean1)?{ ????????this.bean1?=?bean1; ????} } <?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd"> ????<bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="prototype"?/> ????<bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"?scope="singleton"> ????????<property?name="bean1"?ref="bean1"/> ????</bean> </beans> package?com.example.spring.ioc.class7; import?org.junit.jupiter.api.Test; import?org.springframework.context.ApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext; public?class?BeanTest?{ ????@Test ????public?void?test(){ ????????ApplicationContext?ac?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????System.out.println("--------------------------這是第一個(gè)Spring?Context?上下文----------------------------"); ????????Bean?bean?=?ac.getBean("bean",Bean.class); ????????bean.printBean1(); ????????bean.printBean1(); ????????bean.printBean1(); ????????System.out.println("--------------------------這是第二個(gè)Spring?Context?上下文----------------------------"); ????????ApplicationContext?ac1?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????Bean?bean_1?=?ac1.getBean("bean",Bean.class); ????????bean_1.printBean1(); ????????bean_1.printBean1(); ????????bean_1.printBean1(); ????} }
查看全部 -
Singleton作用于如下如:bean作為屬性會(huì)被注入到anotherBean1 anotherBean2 anotherBean3中,這里注意,bean作為單例模式的話,只會(huì)有一個(gè)bean實(shí)例,所以注入到以上實(shí)體中的bean都是同一bean
在一個(gè)Spring上下文環(huán)境下,單例模式會(huì)生成一個(gè)實(shí)例,如果在多個(gè)上下文環(huán)境下則會(huì)一個(gè)Spring上下文環(huán)境單例模式會(huì)生成一個(gè)實(shí)例,多個(gè)Spring上下文每個(gè)Spring上下文都會(huì)生成一個(gè)單例模式!??!
package?com.example.spring.ioc.class7; public?class?Bean?{ ????private?Bean1?bean1; ????public?Bean1?getBean1()?{ ????????return?bean1; ????} ????public?void?setBean1(Bean1?bean1)?{ ????????this.bean1?=?bean1; ????} ????@Override ????public?String?toString()?{ ????????return?"Bean{"?+ ????????????????"bean1="?+?bean1?+ ????????????????'}'; ????} }
package?com.example.spring.ioc.class7; public?class?Bean1?{ }
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd"> ????<bean?id?=?"bean1"?class="com.example.spring.ioc.class7.Bean1"?scope="singleton"?/> ????<bean?id?=?"bean"?class="com.example.spring.ioc.class7.Bean"> ????????<property?name="bean1"?ref="bean1"/> ????</bean> </beans>
package?com.example.spring.ioc.class7; import?org.junit.jupiter.api.Test; import?org.springframework.context.ApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext; public?class?BeanTest?{ ????@Test ????public?void?test(){ ????????ApplicationContext?ac?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????Bean?bean?=?ac.getBean("bean",Bean.class); ????????Bean1?bean1?=?ac.getBean("bean1",Bean1.class); ????????System.out.println("Bean?=?"?+?bean); ????????System.out.println("Bean1?=?"?+?bean1); ????????System.out.println(bean.toString()); ????????System.out.println("--------------------------這是第二個(gè)Spring?Context?上下文----------------------------"); ????????ApplicationContext?ac1?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????Bean?bean_1?=?ac1.getBean("bean",Bean.class); ????????Bean1?bean1_1?=?ac1.getBean("bean1",Bean1.class); ????????System.out.println("bean?=?"?+?bean_1); ????????System.out.println("bean1?=?"?+?bean1_1); ????????System.out.println(bean.toString()); ????} }
查看全部 -
這是注入方式展示:PojoBean{ name='gavin',? bean=com.example.spring.ioc.Bean@4c39bec8, ?num=0, ?bean1=com.example.spring.ioc.Bean@4c39bec8,? ?listStr=[str1,?str2],? ?listBean=[com.example.spring.ioc.Bean@4c39bec8],? ?setStr=[setStr1,?setStr2],? ?setBean=[com.example.spring.ioc.Bean@4c39bec8],? ?map={key1=com.example.spring.ioc.Bean@4c39bec8},? ?mapBean={com.example.spring.ioc.Bean@4c39bec8=com.example.spring.ioc.Bean@4c39bec8},? ?pro={proKey=proValue} ?}
package?com.example.spring.ioc; import?org.junit.jupiter.api.Test; import?org.springframework.context.ApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext; public?class?BeanTests?{ ????@Test ????public?void?Test(){ ????????//通過(guò)構(gòu)造方法實(shí)例化bean ????????ApplicationContext?ac?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????System.out.println("這是注入方式展示:"?+?ac.getBean("pojoBean").toString()); ????} }
package?com.example.spring.ioc; import?java.util.List; import?java.util.Map; import?java.util.Properties; import?java.util.Set; public?class?PojoBean?{ ????private?String?name; ????private?Bean?bean; ????private?Integer?num; ????private?Bean?bean1; ????private?List<String>?listStr; ????private?List<Bean>?listBean; ????private?Set<String>?setStr; ????private?Set<Bean>?setBean; ????private?Map<String,Bean>?map; ????private?Map<Bean,Bean>?mapBean; ????private?Properties?pro; ????public?PojoBean(String?name,?Bean?bean)?{ ????????this.name?=?name; ????????this.bean?=?bean; ????} ????public?String?getName()?{ ????????return?name; ????} ????public?void?setName(String?name)?{ ????????this.name?=?name; ????} ????public?Bean?getBean()?{ ????????return?bean; ????} ????public?void?setBean(Bean?bean)?{ ????????this.bean?=?bean; ????} ????public?Integer?getNum()?{ ????????return?num; ????} ????public?void?setNum(Integer?num)?{ ????????this.num?=?num; ????} ????public?Bean?getBean1()?{ ????????return?bean1; ????} ????public?void?setBean1(Bean?bean1)?{ ????????this.bean1?=?bean1; ????} ????public?List<String>?getListStr()?{ ????????return?listStr; ????} ????public?void?setListStr(List<String>?listStr)?{ ????????this.listStr?=?listStr; ????} ????public?List<Bean>?getListBean()?{ ????????return?listBean; ????} ????public?void?setListBean(List<Bean>?listBean)?{ ????????this.listBean?=?listBean; ????} ????public?Set<String>?getSetStr()?{ ????????return?setStr; ????} ????public?void?setSetStr(Set<String>?setStr)?{ ????????this.setStr?=?setStr; ????} ????public?Set<Bean>?getSetBean()?{ ????????return?setBean; ????} ????public?void?setSetBean(Set<Bean>?setBean)?{ ????????this.setBean?=?setBean; ????} ????public?Map<String,?Bean>?getMap()?{ ????????return?map; ????} ????public?void?setMap(Map<String,?Bean>?map)?{ ????????this.map?=?map; ????} ????public?Map<Bean,?Bean>?getMapBean()?{ ????????return?mapBean; ????} ????public?void?setMapBean(Map<Bean,?Bean>?mapBean)?{ ????????this.mapBean?=?mapBean; ????} ????public?Properties?getPro()?{ ????????return?pro; ????} ????public?void?setPro(Properties?pro)?{ ????????this.pro?=?pro; ????} ????@Override ????public?String?toString()?{ ????????return?"PojoBean{"?+ ????????????????"name='"?+?name?+?'\''?+ ????????????????",?bean="?+?bean?+ ????????????????",?num="?+?num?+ ????????????????",?bean1="?+?bean1?+ ????????????????",?listStr="?+?listStr?+ ????????????????",?listBean="?+?listBean?+ ????????????????",?setStr="?+?setStr?+ ????????????????",?setBean="?+?setBean?+ ????????????????",?map="?+?map?+ ????????????????",?mapBean="?+?mapBean?+ ????????????????",?pro="?+?pro?+ ????????????????'}'; ????} }
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd"> ????<!--通過(guò)構(gòu)造器方法實(shí)例化bean--> ????<bean?id?=?"bean"?class?=?"com.example.spring.ioc.Bean"?name?=?"bean_1,bean_2"/> ????<!--別名--> ????<alias?name="bean"?alias="bean1"?/> ????<!--通過(guò)靜態(tài)方法實(shí)例化bean--> ????<bean?id?=?"bean2"?class?=?"com.example.spring.ioc.Bean2Factory"?factory-method="getBean"?/> ????<!--通過(guò)實(shí)例方法實(shí)例化bean--> ????<bean?id?=?"bean3Factory"?class="com.example.spring.ioc.Bean3Factory"?/> ????<bean?id?=?"bean3"?class="com.example.spring.ioc.Bean3"?factory-bean="bean3Factory" ??????????factory-method="getBean"?/> ????<!--注入bean的方式--> ????<bean?id?=?"pojoBean"?class="com.example.spring.ioc.PojoBean"> ????????<constructor-arg?index="0"?value="gavin"?type="java.lang.String"?name="name"/> ????????<constructor-arg?index="1"?ref="bean"?type="com.example.spring.ioc.Bean"?name="bean"/> ????????<property?name="bean1"?ref="bean"?/> ????????<property?name="num"?value="0"?/> ????????<property?name="listBean"?> ????????????<list> ????????????????<ref?bean="bean"/> ????????????</list> ????????</property> ????????<property?name="listStr"> ????????????<list> ????????????????<value>str1</value> ????????????????<value>str2</value> ????????????</list> ????????</property> ????????<property?name="setBean"> ????????????<set> ????????????????<ref?bean="bean"/> ????????????</set> ????????</property> ????????<property?name="setStr"> ????????????<set> ????????????????<value>setStr1</value> ????????????????<value>setStr2</value> ????????????</set> ????????</property> ????????<property?name="map"> ????????????<map> ????????????????<entry?key="key1"?value-ref="bean"?/> ????????????</map> ????????</property> ????????<property?name="mapBean"> ????????????<map> ????????????????<entry?key-ref="bean"?value-ref="bean"/> ????????????</map> ????????</property> ????????<property?name="pro"> ????????????<props> ????????????????<prop?key="proKey"?>proValue</prop> ????????????</props> ????????</property> ????</bean> </beans>
查看全部 -
Spring實(shí)例化Bean?
通過(guò)構(gòu)造方法實(shí)例化bean
通過(guò)靜態(tài)方法實(shí)例化bean
通過(guò)實(shí)例方法實(shí)例化bean
Bean的別名? ? ? ?
package?com.example.spring.ioc; public?class?Bean?{ ????public?Bean()?{ ????????System.out.println("我是Bean的構(gòu)造器!"); ????} }
package?com.example.spring.ioc; public?class?Bean2?{ ????public?Bean2()?{ ????????System.out.println("我是Bean2的構(gòu)造器!"); ????} }
package?com.example.spring.ioc; public?class?Bean2Factory?{ ????public?static?Bean2?getBean(){ ????????return?new?Bean2(); ????} }
package?com.example.spring.ioc; public?class?Bean3?{ ????public?Bean3()?{ ????????System.out.println("我是Bean3的構(gòu)造器!"); ????} }
package?com.example.spring.ioc; public?class?Bean3Factory?{ ????public??Bean3?getBean(){ ????????return?new?Bean3(); ????} }
<?xml?version="1.0"?encoding="UTF-8"?> <beans?xmlns="http://www.springframework.org/schema/beans" ???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???????xsi:schemaLocation="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd"> ????<!--通過(guò)構(gòu)造器方法實(shí)例化bean--> ????<bean?id?=?"bean"?class?=?"com.example.spring.ioc.Bean"?name?=?"bean_1,bean_2"/> ????<!--別名--> ????<alias?name="bean"?alias="bean1"?/> ????<!--通過(guò)靜態(tài)方法實(shí)例化bean--> ????<bean?id?=?"bean2"?class?=?"com.example.spring.ioc.Bean2Factory"?factory-method="getBean"?/> ????<!--通過(guò)實(shí)例方法實(shí)例化bean--> ????<bean?id?=?"bean3Factory"?class="com.example.spring.ioc.Bean3Factory"?/> ????<bean?id?=?"bean3"?class="com.example.spring.ioc.Bean3"?factory-bean="bean3Factory" ??????????factory-method="getBean"?/> </beans>
package?com.example.spring.ioc; import?org.junit.jupiter.api.Test; import?org.springframework.context.ApplicationContext; import?org.springframework.context.support.ClassPathXmlApplicationContext; public?class?BeanTests?{ ????@Test ????public?void?Test(){ ????????//通過(guò)構(gòu)造方法實(shí)例化bean ????????ApplicationContext?ac?=?new?ClassPathXmlApplicationContext("spring.xml"); ????????Bean?bean?=?ac.getBean("bean",Bean.class); ????????System.out.println("這是bean?:?"?+?bean); ????????System.out.println("通過(guò)構(gòu)造器實(shí)例化bean完成!"); ????????//通過(guò)靜態(tài)方法實(shí)例化bean ????????Bean2?bean2?=?ac.getBean("bean2",Bean2.class); ????????System.out.println("這是Bean2?:?"?+?bean2); ????????System.out.println("通過(guò)靜態(tài)方法實(shí)例化bean2完成!"); ????????//通過(guò)實(shí)例化方法實(shí)例化bean ????????Bean3?bean3?=?ac.getBean("bean3",Bean3.class); ????????System.out.println("這是bean3?:?"?+?bean3); ????????System.out.println("通過(guò)實(shí)例方法實(shí)例化bean完成!"); ????????//bean別名 ????????Bean?bean1?=?ac.getBean("bean1",Bean.class); ????????System.out.println("這是別名bean1?:?"?+?bean1); ????????Bean?bean_1?=?ac.getBean("bean_1",Bean.class); ????????System.out.println("這是別名bean_1?:?"?+?bean_1); ????????Bean?bean_2?=?ac.getBean("bean_2",Bean.class); ????????System.out.println("這是別名bean_2?:?"?+?bean_2); //????????System.out.println("這是注入方式展示:"?+?ac.getBean("pojoBean").toString()); ????} }
查看全部 -
IOC(Inversion of Control)控制反轉(zhuǎn)、依賴注入
控制什么?
控制對(duì)象的創(chuàng)建及銷毀(生命周期)
反轉(zhuǎn)什么?
將對(duì)象的控制權(quán)交給IOC容器
查看全部 -
Spring?IOC介紹
查看全部 -
ioc為控制反轉(zhuǎn),依賴注入。 控制什么 控制對(duì)象,對(duì)象的創(chuàng)建和銷毀。依賴注入什么 通過(guò)ioc控制對(duì)象。查看全部
-
假設(shè)不把控制權(quán)交給ioc,那換一輛車就得重寫方法
查看全部 -
如果某個(gè)Bean在程序整個(gè)運(yùn)行周期都可能不會(huì)被使用,那么可以考慮懶加載
優(yōu)點(diǎn):盡可能的節(jié)省了資源
缺點(diǎn):可能會(huì)導(dǎo)致某個(gè)操作響應(yīng)時(shí)間增加
查看全部 -
Bean1和Bean2的作用域
查看全部 -
注解注入bean
查看全部
舉報(bào)