-
bean1單例,Bean2多例的時候
如果想要注入的bean2是不同bean2時,可以用
????類中定義abstract抽象方法,protect abstract Bean2 createBean2();
????配置文件種 原來property標簽注入的,改用lookup-method標簽注入name制定淚中方法,bean制定注入bean2
查看全部 -
1、構造方式注入
????類中有帶參數(shù)構造方法
????xml中配置bean,子標簽constructor-arg標簽,配置屬性? index、name、type確定構造參數(shù),配置value,ref給屬性賦值(ref用用,value基本)
還要簡便寫法如圖,要改一下文件上面頭部申明
2、集合類型注入
????類中get/set方法
????xml中配置property標簽,標簽下子標簽list,list下用value/ref標簽賦值;set用set標簽,下面也用value/ref標簽賦值;map用Map標簽,entry標簽賦值;properties,子標簽props子標簽prop賦值
查看全部 -
Spring實例化bean的三種方式:
1、構造方法實例化Bean
2、靜態(tài)方法實例化Bean
????BeanFactory類,類中有靜態(tài)方法,作用實例化Bean
????xml中配置BeanFactory,標簽屬性中factory-method=類中實例化Bean的靜態(tài)方法
3、實例化方法實例化Bean
????BeanFactory類,類中有方法,作用實例化Bean
????xml中配置BeanFactory,
????xml中配置bean,bean的屬性中factory-bean=factoryBean? ,factory-method=factory中實例化bean的方法
4、Bean的別名
查看全部 -
IoC容器約定
查看全部 -
Spring通過注解注入Bean
@Autowired:通過該注解實現(xiàn)構造方法注入和set方法注入,可以標識在有參構造方法上、set方法上、屬性上。
一、通過方法注入Bean
1:通過有參構造方法注入
步驟1:創(chuàng)建掃描配置類,并添加注解@Configuration、@ComponentScan(value=“路徑”)
代碼:
@Configuration
@ComponentScan(value="springzhuru")
public class MyConfiguration {
}
步驟2:創(chuàng)建要實例化的Bean,并提供有參的構造方法,并在構造方法上添加注解@Autowired在類上添加@Component。
代碼:@Component
public class MyBean {
private AnotherBean anotherBean;
@Autowired
public MyBean(AnotherBean anotherBean) {
super();
this.anotherBean = anotherBean;
}
查看全部 -
SpringIOC注解基本使用(spring2.5后支持注解來管理javaBean)
@Configuration:該注解標識在類上,然后就可以通過AnnotationConfigApplicationContext(***.class)來獲取spring上下文環(huán)境(相當于xml的功能)。
@Bean:與xml配置文件<bean>標簽一個用處,<bean>標簽的id相當于獲得@Bean(name="Id名"),如果不使用name,Id名為方法名稱。
@Component:告知spring管理這個類,還可以通過該注解的value屬性指定Bean的Id。
@Controller:被標注在Controller層。
@Service:被標注在Service層。
@Repository:被標注在Dao層
與Spring.xml相比不同點:
1、不用配置xml文件
2、提供一個配置類,并采用注解,來獲取Bean
3、獲取spring上下文的對象不同,注解使 用AnnotationConfigApplicationContext(***.class)獲取spring上下文。
步驟1:提供一個配置類,并在類上添加@Configuration注解,并提供一個返回Bean對象的方法,并在該方法上添加注解。(如果@Bean沒指定name屬性,則Id為方法名)
步驟2:提供一個要創(chuàng)建的Bean的類。
如何進行簡化:當要獲取多個Bean時,則要編寫多個@Bean注解和獲取Bean方法?
步驟1:在配置類中添加@ComponentScan(value=“掃描的路徑”)注解。
@ComponentScan()注解的作用:掃描帶有注解@Component的Class,Spring將管理這些Class。
步驟2:Bean的類上加注解@Component,它的Bean的Id是類名的首字母小寫的全稱,如果不想使用這種方式,則使用@Component(value=“Id名”)。
spring.xml中開啟包掃描:<context:component-scan base-package="掃描的包路徑"/>
如何給Bean取別名(一個Bean對應多個Id名)?
因為Bean()注解里的name屬性是String類型的數(shù)組,所以可以通過它來指定Bean的多個Id。注意:@Component里的value是字符串類型,只能有一個BeanId。
spring.xml給Bean取別名?
<bean id="bean1" name="bean2,bean3" class="..."/>
<alias name="bean1" ?alias="bean4"/>
查看全部 -
Bean屬性繼承應用場景:
場景一:ParentClass(屬性1,屬性2,屬性3,get和set方法)
子類1(屬性4,屬性5)?
子類2(屬性6,屬性7)
場景2:子類1和子類2沒有父類,而是有一些相同的屬性。
類1:(屬性1,屬性2,屬性3,屬性4,屬性5)
類2:(屬性1,屬性2,屬性3,屬性6,屬性7)
abstract="true":設置<bean>標簽只是定義性的,不會對它進行實例化操作。
parent屬性:在Bean的子類bean標簽添加,值為父類的Id。
查看全部 -
Bean初始化及銷毀邏輯處理(在singleton作用域上進行講解)
Bean初始化——如果需要在Bean實例化時執(zhí)行一些邏輯,Spring提供了兩種方法:(有一個javaBean,該Bean作用,連接數(shù)據(jù)庫,例如session,斷開數(shù)據(jù)庫連接,該Bean被創(chuàng)建之后,執(zhí)行數(shù)據(jù)庫連接的過程)
方法1:bean標簽里的init-method屬性,該值為Bean的某一方法,Spring實例化時,會調用Bean的該方法。
方法2:讓Bean實現(xiàn)InitializingBean接口,Spring在實例化該Bean時,檢測到Bean實現(xiàn)了該接口,就會調用該接口所定義的相應方法。
Bean銷毀——如果需要在Bean銷毀之前執(zhí)行一些邏輯,有兩種方法。
方法1:bean標簽里的destory-method屬性,該值為Bean的某一方法,Spring銷毀該Bean時,會調用Bean的該方法。
方法2:讓Bean實現(xiàn)DisposableBean接口,Spring在銷毀該Bean時,檢測到Bean實現(xiàn)了該接口,就會調用該接口所定義的相應方法。
查看全部 -
Bean懶加載概念:
Spring容器會在創(chuàng)建容器時提前初始化Singleton作用域的bean,但是如果Bean被標注了lazy-init=“true”,則該Bean只有在其被需要的時候才會被初始化。(只對singleton作用域的bean有效)
代碼:<bean id="bean" class="main.java.com.Bean懶加載.Bean" scope="singleton" lazy-init="true"></bean>
解決多個bean使用懶加載問題:
<beans標簽里添加default-lazy-init=“true”>:表示spring配置文件里所有bean都是懶加載模式。
使用場景:
如果某個Bean在程序整個運行周期都可能不會被使用,那么可考慮設定該Bean為懶加載。
優(yōu)點:盡可能的節(jié)省了資源。
缺點:可能會導致某個操作相應操作時間增加。
查看全部 -
spring通過xml實現(xiàn)自定義作用域(自定義雙例模式作用域)
SimpleThreadScope:Spring內置作用域。
編寫自定義作用域:
步驟1:實現(xiàn)Scope接口(org.springframework.beans.factory.config),主要關注實現(xiàn)的get方法和remove方法。
get方法:按照name參數(shù),按照我們自己定義的規(guī)則,去返回一個Bean,如果我們定義的規(guī)則里,Bean不存在,那么將通過objectFactory去創(chuàng)建一個Bean。
雙例模式:一個bean的Id對應兩個實例,實現(xiàn)雙例模式,需要兩個Map集合,Map<String,Object> map1=new HashMap<String,Object>();Map<String,Object> map2=new HashMap<String,Object>();。
查看全部 -
springweb上下文環(huán)境
request作用域:每次執(zhí)行request請求調用到bean時會重新實例化bean對象
session作用域:請求session重置后會重新實例化
application作用域:應用重啟后會重新實例化
查看全部 -
通過Spring的xml文件配置Bean作用域:(Spring默認作用域是Singleton)
1、Singleton作用域(單例模式:通過Spring容器實現(xiàn)單例模式,具有局限性:保證在一個Spring上下文(ApplicationContext)是單例模式,多個AppliactionContext單例模式就失效了。
定義:如果一個<bean>的作用域為Singleton,則該<bean>只會被實例化一次,只有一個Bean會被創(chuàng)建。(每次向Spring上下文(ApplicationContext生命周期存活)請求這個實例時,Spring都會返回同一個實例)。
2、prototype作用域(多例模式)
定義:如果一個<bean>的作用域為prototype,則該<bean>會被實例化多次,有多個Bean會被創(chuàng)建(每次向Spring上下文請求該Bean都會new一個新的實例)。
查看全部 -
第一種:通過構造方法注入Bean
#<bean>標簽管理class對象。
#bean的構造方法參數(shù)標簽 constructor-arg。
#index 表示構造方法的第幾個參數(shù)。
#name 表示構造方法的參數(shù)名。
#type 表示對應的參數(shù)類型。
#value 表示為參數(shù)提供賦值,一般用于String等簡單常用對象。
#ref 表示為參數(shù)提供賦值,一般是復雜點的依賴其它 class的對象(取bean的id)。
注意:只要通過index、name、type的組合明確表示出構造函數(shù)的那一個參數(shù)即可,
不一定全用,只用index也可以。
<bean class="com.imooc.spring.ioc.class06.Bean">
<constructor-arg ?index="0" name="anotherBean"
type="com.imooc.spring.ioc.class06.AnotherBean">
</constructor-arg>?
</bean>
通過構造方法注入Bean,輸出結果:
成功的給屬性賦值。?
查看全部 -
1、通過構造方法實例化Bean。
步驟1:創(chuàng)建要實例化的類,并提供無參構造方法。
public class Bean {
public Bean(){
System.out.println("Bean被創(chuàng)建了");
}
步驟2:spring.xml中配置
<bean id="bean的唯一標識" class="要實例化bean的路徑"></bean>
測試:ApplicationContext context=new ClassPathXmlApplicationContext(spring.xml的路徑);
Bean bean=context.getBean("bean",Bean.class);
System.out.println(bean);
2、通過靜態(tài)方法實例化Bean。(通過Bean2的工廠的靜態(tài)方法實例化Bean)
步驟1:創(chuàng)建Bean2的工廠Bean2Factory類以及Bean2類,并且提供一個靜態(tài)、返回值類型為Bean2的方法,返回new Bean2()。
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
public class Bean2 {
public Bean2(){
System.out.println("Bean2被創(chuàng)建了。");
}
步驟2:配置Spring.xml
<bean class="Bean2工廠的路徑" factory-method="Bean2工廠的靜態(tài)方法名" id="Bean2工廠的唯一標識"></bean>
測試:
ApplicationContext context=new ClassPathXmlApplicationContext("spring-ioc2.xml");
Bean2 bean=context.getBean("bean2factoryId",Bean2.class);
System.out.println(bean);
3、通過實例方法實例化Bean。(通過Bean2的工廠的實例方法實例化Bean)
步驟1:創(chuàng)建Bean3的工廠Bean3Factory類以及Bean3類,并且提供一個返回值類型為Bean3的方法,方法返回new Bean3()。
public class Bean3Factory {
public ?Bean3 getBean3(){
return new Bean3();
}
}
public class Bean3 {
public Bean3(){
System.out.println("Bean3被創(chuàng)建了。");
}
}
步驟2:配置Spring.xml
<bean class="main.java.com.imooc2.Bean3Factory" id="bean3Factory"></bean>
<bean class="main.java.com.imooc2.Bean3" factory-bean="bean3Factory" factory-method="getBean3" id="bean3"></bean>
給bean取別名:有類Bean1,并且通過bean標簽實例化Bean1,給Bean1的實例取多個名字。
例如:方式一:bean標簽里添加name屬性
<bean id="bean" class="main.java.com.imooc1.Bean" name="bean1_1,bean1_2"></bean>
? ? ? ? ? ?方式二:添加<alias>標簽
<bean id="bean" class="main.java.com.imooc2.Bean1" name="bean1_1,bean1_2"></bean>
<alias name="bean" alias="bean1_3"/><!-- alias只支持一個別名 -->
查看全部 -
org.springframework.beans.factory.config
查看全部
舉報