日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring 基本配置学习

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 基本配置学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  1.bean的方式說明

    作用:

?    ?? 用于配置對象讓spring來創建的。

???     默認情況下它調用的是類中的無參構造函數。如果沒有無參構造函數則不能創建成功。

    屬性:

???    id:給對象在容器中提供一個唯一標識。用于獲取對象。

     name:如果一個bean只配置了name屬性,但是沒有配置ID屬性,默認會ID屬性=name屬性 name定義的是bean的alias,可以有多個,并可能與其他的bean重名。

     class:指定類的全限定類名。用于反射創建對象。默認情況下調用無參構造函數。

    ? ?scope:指定對象的作用范圍。

???????????     * singleton :默認值,單例的.

    ??????????? * prototype :多例的.

???????????     * request?? :WEB項目中,Spring創建一個Bean的對象,將對象存入到request域中.

    ??????????? * session?? :WEB項目中,Spring創建一個Bean的對象,將對象存入到session域中.

    ??????????? * globalSession :WEB項目中,應用在Portlet環境.如果沒有Portlet環境那么globalSession相當于session.

?

???    ? ?init-method:指定類中的初始化方法名稱。

    ? ?destroy-method:指定類中銷毀方法名稱。

  2.bean的作用范圍和生命周期

???   單例對象:scope="singleton"

??????  ? 一個應用只有一個對象的實例。它的作用范圍就是整個引用。

??????  ? 生命周期:

??????????? 對象出生:當應用加載,創建容器時,對象就被創建了。

??????????? 對象活著:只要容器在,對象一直活著。

??????????? 對象死亡:當應用卸載,銷毀容器時,對象就被銷毀了。

???   多例對象:scope="prototype"

?????  ??? 每次訪問對象時,都會重新創建對象實例。

?????  ??? 生命周期:

??????????? 對象出生:當使用對象時,創建新的對象實例。

??????????? 對象活著:只要對象在使用中,就一直活著。

??????????? 對象死亡:當對象長時間不用時,被java的垃圾回收器回收了。

3.實例化Bean的方式(xml,注解)

第一種方式:使用默認無參構造函數<!--在默認情況下:它會根據默認無參構造函數來創建類對象。如果bean中沒有默認無參構造函數,將會創建失敗。 --> <bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"/>第二種方式:spring管理靜態工廠-使用靜態工廠的方法創建對象 /*** 模擬一個靜態工廠,創建業務層實現類*/ public class StaticFactory { public static ICustomerService createCustomerService(){return new CustomerServiceImpl();} } <!-- 此種方式是:使用StaticFactory類中的靜態方法createCustomerService創建對象,并存入spring容器id屬性:指定bean的id,用于從容器中獲取class屬性:指定靜態工廠的全限定類名factory-method屬性:指定生產對象的靜態方法--> <bean id="customerService" class="com.itheima.factory.StaticFactory" factory-method="createCustomerService"></bean>第三種方式:spring管理實例工廠-使用實例工廠的方法創建對象 /*** 模擬一個實例工廠,創建業務層實現類* 此工廠創建對象,必須現有工廠實例對象,再調用方法*/ public class InstanceFactory { public ICustomerService createCustomerService(){return new CustomerServiceImpl();} }<!-- 此種方式是:先把工廠的創建交給spring來管理。然后在使用工廠的bean來調用里面的方法factory-bean屬性:用于指定實例工廠bean的id。factory-method屬性:用于指定實例工廠中創建對象的方法。--><bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean><bean id="customerService" factory-bean="instancFactory" factory-method="createCustomerService"></bean> xml配置方式 <!-- 告知spring框架在,讀取配置文件,創建容器時,掃描注解,依據注解創建對象,并存入容器中 --><context:component-scan base-package="com.itheima"></context:component-scan> <!--1111111111111111111111111111111111111111111111111-->他們三個注解都是針對@Component的衍生注解,他們的作用及屬性都是一模一樣的。 他們只不過是提供了更加明確的語義化。@Controller:一般用于表現層的注解。@Service:一般用于業務層的注解。@Repository:一般用于持久層的注解。 細節:如果注解中有且只有一個屬性要賦值時,且名稱是value,value在賦值是可以不寫。 注解配置方式

  4.spring依賴注入數據(xml,注解)

?

<!-- 使用xml時可以通過配置構造方法和利用set方法注入的屬性的值,可以是基本數據類型,引用類型,map,list等 --> <!-- 通過配置文件給bean中的屬性傳值:使用set方法的方式涉及的標簽:property屬性:name:找的是類中set方法后面的部分ref:給屬性賦值是其他bean類型的value:給屬性賦值是基本數據類型和string類型的實際開發中,此種方式用的較多。 --> <bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"><property name="name" value="test"></property><property name="age" value="21"></property><property name="birthday" ref="now"></property> </bean><bean id="now" class="java.util.Date"></bean><!--111111111111111111111111111111111111111--> <!-- 注入集合數據 List結構的:array,list,setMap結構的map,entry,props,prop --> <bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"><!-- 在注入集合數據時,只要結構相同,標簽可以互換 --><!-- 給數組注入數據 --><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><!-- 注入list集合數據 --><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><!-- 注入set集合數據 --><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><!-- 注入Map數據 --><property name="myMap"><props><prop key="testA">aaa</prop><prop key="testB">bbb</prop></props></property><!-- 注入properties數據 --><property name="myProps"><map><entry key="testA" value="aaa"></entry><entry key="testB"><value>bbb</value></entry></map></property> </bean>xml注入屬性 xml注入屬性 @Autowired 作用: 默認是按照byType進行注入的,如果發現找到多個bean,則,又按照byName方式比對,如果還有多個,則報出異常。 @Qualifier 作用:@Qualifier("XXX")中的 XX是 Bean 的名稱,所以 @Autowired 和 @Qualifier 結合使用時,自動注入的策略就從 byType 轉變成 byName 了;但是給方法參數注入時,可以獨立使用。 屬性:value:指定bean的id。 @Resource 作用:@Resource的作用相當于@Autowired,只不過@Autowired按byType自動注入,而@Resource默認按 byName自動注入罷了。@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。 @Resource裝配順序 1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常 2. 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常 3. 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常 4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配; 屬性:name:指定bean的id。 @Value 作用:注入基本數據類型和String類型數據的 屬性:value:用于指定值 @Scope 作用:指定bean的作用范圍。 屬性:value:指定范圍的值。取值:singleton prototype request session globalsession @PostConstruct 作用:用于指定初始化方法。 @PreDestroy 作用:用于指定銷毀方法。 注解配置屬性

?

?  5.spring的純注解配置

/*** 客戶的業務層實現類*/ @Configuration//表明當前類是一個配置類 @ComponentScan(basePackages = "com.itheima")//配置要掃描的包 public class SpringConfiguration { }那么新的問題又來了,我們如何獲取容器呢? public class Client {public static void main(String[] args) {//1.獲取容器:由于我們已經沒有了xml文件,所以再用讀取xml方式就不能用了。//這時需要指定加載哪個類上的注解ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);//2.根據id獲取對象ICustomerService cs = (ICustomerService) ac.getBean("customerService");cs.saveCustomer();} } java案例 @Configuration 作用:用于指定當前類是一個spring配置類,當創建容器時會從該類上加載注解。獲取容器時需要使用AnnotationApplicationContext(有@Configuration注解的類.class)。屬性:value:用于指定配置類的字節碼示例代碼:/*** 用于初始化spring容器的配置類*/@Configurationpublic class SpringConfiguration{}@ComponentScan 作用:用于指定spring在初始化容器時要掃描的包。作用和在spring的xml配置文件中的:<context:component-scan base-package="com.itheima"/>是一樣的。屬性:basePackages:用于指定要掃描的包。和該注解中的value屬性作用一樣。@PropertySource 作用:用于加載.properties文件中的配置。例如我們配置數據源時,可以把連接數據庫的信息寫到properties配置文件中,就可以使用此注解指定properties配置文件的位置。屬性:value[]:用于指定properties文件位置。如果是在類路徑下,需要寫上classpath:@Import 作用:用于導入其他配置類,在引入其他配置類時,可以不用再寫@Configuration注解。當然,寫上也沒問題。屬性:value[]:用于指定其他配置類的字節碼。示例代碼:@Configuration@ComponentScan(basePackages = "cn.itcast.spring")@Import({ Configuration_B.class})public class Configuration_A {}@Configuration@PropertySource("classpath:info.properties")public class Configuration_B {}@Bean 作用:該注解只能寫在方法上,表明使用此方法創建一個對象,并且放入spring容器。它就相當于我們之前在xml配置中介紹的factory-bean和factory-method。屬性:name:給當前@Bean注解方法創建的對象指定一個名稱(即bean的id)。示例代碼:@Bean(name = "datasource2")public DataSource createDS() throws Exception {ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();comboPooledDataSource.setUser("root");comboPooledDataSource.setPassword("1234");comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");comboPooledDataSource.setJdbcUrl("jdbc:mysql:///spring_ioc");return comboPooledDataSource;} 注解說明

?

轉載于:https://www.cnblogs.com/codeLei/p/9315268.html

總結

以上是生活随笔為你收集整理的spring 基本配置学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。