日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring框架花式創建Bean的n種方法(小結)

瀏覽:136日期:2023-09-14 14:04:05

常用的從容器中獲取bean實例使用這樣的方式:

@Testpublic void test() {Persion p = (Persion) ioc.getBean('p1');System.out.println(p);}

常用的在容器中配置組件使用這樣的方式:

<bean class='com.gql.bean.Persion'><property name='name' value='張三'></property><property name='age' value='18'></property><property name='email' value='zs@163.com'></property><property name='gender' value='男'></property></bean>

下面的實驗介紹一些Spring容器中注冊組件對象的其他方法。

實驗1:根據bean的類型從ioc容器中獲取實例

@Testpublic void test01() {Persion p = ioc.getBean(Persion.class);System.out.println(p);}

這種方法查找的好處是不需要類型轉換,但是如果ioc容器中要找的bean有多個,使用這種方法查找就會報錯。可以改用下面的方式:

@Testpublic void test01() {Persion p = ioc.getBean('p1', Persion.class);System.out.println(p);}

實驗2:通過有參構造器為bean的屬性賦值

需要提前在bean中添加有參構造器,才能進行下面的測試。

<bean class='com.gql.bean.Persion'><constructor-arg name='name' value='李四'></constructor-arg><constructor-arg name='age' value='22'></constructor-arg><constructor-arg name='email' value='ls@163.com'></constructor-arg><constructor-arg name='gender' value='男'></constructor-arg></bean>

使用這種有參構造器為bean的屬性賦值,可以省略name,但是value的順序必須與bean中的順序一致。(若再使用index和type進行索引,可以不按順序)

通過名稱空間為bean賦值:

添加p命名空間標簽頭:xmlns:p=“http://www.springframework.org/schema/p”

<bean p:name='小王' p:age='22'p:gender='男' p:email='wang@163.com'></bean>

實驗3:為各種屬性賦值

引用類型、集合類型、級聯類型。

如題,給出一個賦值的Bean對象,為其在容器中注冊。此時所有復雜的賦值都在property標簽體內。

public class Persion {private String name;private String gender;private Integer age;private String email;private Car car;private List<Book> book;private Map<String, Object> maps;private Properties properties;//省略setter與getter方法}

普通屬性賦值:

<!-- 普通屬性賦值 --><property name='name' value='張三'></property><property name='gender' value='男'></property><property name='age' value='20'></property><property name='email'><null /></property>

引用類型賦值:

<bean class='com.gql.bean.Persion'><!-- 引用外部bean --><!-- <property name='car' ref='c1'></property> --><!-- 引用內部bean(內部bean不能被獲取到) --><property name='car'><bean class='com.gql.bean.Car'><property name='carName' value='自行車'></property><property name='color' value='黑色'></property><property name='price' value='400'></property></bean></property></bean><bean class='com.gql.bean.Car'><property name='carName' value='寶馬'></property><property name='color' value='白色'></property><property name='price' value='30000'></property></bean>

集合類型賦值:

list

<bean class='com.gql.bean.Persion'><property name='book'><list><bean p:bookName='西游?' p:author='吳承恩'></bean><ref bean='book01' /></list></property></bean><bean class='com.gql.bean.Book'><property name='bookName' value='水滸傳'></property><property name='author' value='施耐庵'></property></bean>

map

<property name='maps'><map><entry key='k01' value='v01'></entry><entry key='k02' value='v02'></entry><entry key='k03' value-ref='book01'></entry><entry key='k04'><bean class='com.gql.bean.Car'><property name='carName' value='捷豹'></property><property name='color' value='紅色'></property><property name='price' value='50000'></property></bean></entry></map></property>

properties

<property name='properties'><props><prop key='username'>root</prop><prop key='password'>123456</prop></props></property>

實驗4:通過繼承實現bean配置信息的重用

下面的代碼中p4繼承了p3,需要改動的屬性在property標簽中修改即可,其余的全部原樣繼承。

<bean class='com.gql.bean.Persion'><property name='name' value='張三'></property><property name='age' value='20'></property><property name='gender' value='男'></property><property name='email' value='zs@163.com'></property></bean><bean parent='p3'><property name='name' value='李四'></property></bean>

實驗5:單實例singleton和多實例prototype

單實例singleton 多實例prototype ①容器啟動時創建好對象并保存在容器中 ①獲取Bean時才會創建這個對象 ②調用初始化方法 ②調用初始化方法 ③容器關閉時調用銷毀方法 ③容器銷毀時不調用銷毀方法 任何時間獲取都是獲取之前創建好的那個對象 每次獲取都會創建一個新的對象

詳情可參照博客:通過工廠創建Bean的三種方式

實驗6:創建帶有生命周期的Bean

ioc容器中注冊的組件:

單實例:容器啟動的時候就會創建好,容器關閉也會銷毀創建的bean。 多實例:獲取的時候才創建。

可以為bean自定義一些生命周期方法,spring在創建或銷毀的時候就會調用指定的方法。

(1)單實例Singleton測試

在Book類中創建方法:

package com.gql.bean;public class Book {private String bookName;private String author;public void myInit() {System.out.println('Book的初始化方法...');}public void myDestory() {System.out.println('Book的銷毀方法...');}public Book() {super();// TODO Auto-generated constructor stubSystem.out.println('Book創建...');}}

在xml中注冊組件:

<bean destroy-method='myDestory' init-method='myInit'></bean>

測試:

在ApplicationContext中沒有close方法,需要將容器類型轉換為ConfigurableApplicationContext 。

public class IoCTest {ConfigurableApplicationContext ioc = new ClassPathXmlApplicationContext('ApplicationContext.xml');@Testpublic void test10() {System.out.println('容器關閉了');ioc.close();}}

Spring框架花式創建Bean的n種方法(小結)

(2)多實例prototype測試

只需要改變xml中注冊組件為多實例:

<bean destroy-method='myDestory' init-method='myInit' scope='prototype'></bean>

仍然使用上面的方法進行測試:

Spring框架花式創建Bean的n種方法(小結)

可以看到容器的創建銷毀一系列都沒有進行,這是因為多實例在獲取bean的時候才創建實例。

多實例測試中增加獲取bean:

@Testpublic void test10() {Object bean = ioc.getBean('book01');System.out.println(bean);System.out.println('容器關閉了');ioc.close();}

Spring框架花式創建Bean的n種方法(小結)

測試結果中,成功創建了實例,但是容器關閉并沒有銷毀Bean。

實驗7:測試Bean的后置處理器

后置處理器有一點代理對象的意思,使用后置處理器,Bean的生命周期變成下面的樣子:

容器啟動—>后置處理器Before—>初始化方法—>后置處理器After—>容器關閉(調用銷毀方法)

不管有沒有初始化方法,后置處理器都會默認其有,繼續工作。

后置處理器:

package com.gql.bean;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * 1.編寫后置處理器 * 2.將后置處理器注冊在配置文件 * @author guoqianliang * */public class MyBeanPostProcessor implements BeanPostProcessor {/** * 初始化前調用 */@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {// TODO Auto-generated method stubSystem.out.println('Before:' + beanName + '將要調用初始化方法了...' + bean);return bean;}/** * 初始化后調用 */@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {// TODO Auto-generated method stubSystem.out.println('After:' + beanName + '初始化方法調用完了' + bean);return bean;}}

將后置處理器注冊在配置文件:

<?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 destroy-method='myDestory' init-method='myInit' scope='singleton'></bean><!-- 后置處理器:可以在bean的初始化前后調用方法 --><bean class='com.gql.bean.MyBeanPostProcessor'></bean></beans>

測試:

@Testpublic void test11() {Object bean = ioc.getBean('book01');System.out.println('容器關閉了');ioc.close();}

Spring框架花式創建Bean的n種方法(小結)

實驗8:引用外部文件

在Spring中bean默認都是單實例的,而數據庫作為單實例是最好不過的,一個項目就是一個連接池,連接池里面管理很多連接,連接是直接從連接池中拿。可以讓Spring幫我們創建連接池對象,管理連接池。

注冊連接池第一代

在配置中注冊連接池:

<bean class='com.mchange.v2.c3p0.ComboPooledDataSource'><property name='user' value='root'></property><property name='password' value='Hudie'></property><property name='jdbcUrl' value='jdbc:mysql://localhost:3306/test'></property><property name='driverClass' value='com.mysql.jdbc.Driver'></property></bean>

測試:

@Testpublic void test12() throws SQLException {// 從容器中拿到連接// DataSource bean = (DataSource) ioc.getBean('dataSource');DataSource bean2 = ioc.getBean(DataSource.class);System.out.println(bean2.getConnection());}

成功獲取到了這個連接:

Spring框架花式創建Bean的n種方法(小結)

注冊連接池第二代

在config包下創建一個dbconfig.properties用來保存數據庫連接信息。

為了防止配置文件中的key與Spring自己的關鍵字沖突。可以為key加一個前綴,業內通用的做法是使用jabc.xxx

jdbc.username:rootjdbc.password:Hudiejdbc.jdbcUrl:jdbc:mysql://localhost:3306/testjdbc.driverClass:com.mysql.jdbc.Driver

注冊數據庫連接池:

<bean id='dataSource'class='com.mchange.v2.c3p0.ComboPooledDataSource'><property name='user' value='${jdbc.username}'></property><property name='password' value='${jdbc.password}'></property><property name='jdbcUrl' value='${jdbc.jdbcUrl}'></property><property name='driverClass' value='${jdbc.driverClass}'></property></bean>

測試:

@Testpublic void test12() throws SQLException {DataSource bean2 = ioc.getBean(DataSource.class);System.out.println(bean2.getConnection());}

Spring框架花式創建Bean的n種方法(小結)

到此這篇關于Spring框架花式創建Bean的n種方法的文章就介紹到這了,更多相關Spring 創建Bean內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国语对白精品一区二区| 久久精品九色| 日韩精品dvd| 国产精品久久久久av电视剧| 97精品一区二区| 韩国久久久久久| 色老板在线视频一区二区| 日韩三区免费| 国产午夜精品一区二区三区欧美 | 国产精品国产三级国产在线观看| 卡一卡二国产精品| 国产亚洲一区二区手机在线观看| 欧美日韩国产精品一区二区亚洲| 蜜臀国产一区二区三区在线播放| 日本综合精品一区| 麻豆一区二区三| 午夜精品成人av| 九一精品国产| 日本欧美在线| 久久亚洲精精品中文字幕| 亚洲h色精品| 亚洲影院天堂中文av色| 日本强好片久久久久久aaa| 欧美a级一区二区| 91精品一区二区三区综合| 蜜桃视频一区二区| 国产乱子精品一区二区在线观看| 9999国产精品| 亚洲一区二区三区免费在线观看| 91亚洲精品视频在线观看| 黄色aa久久| 蜜桃久久av一区| 精品视频黄色| 99亚洲视频| 国产精品www.| 欧美日韩精品一本二本三本 | 成人看片网站| 日韩欧美三区| 欧美日韩尤物久久| 日韩av一区二区在线影视| 日韩大片在线| 日韩精品免费观看视频| 久久婷婷av| 日韩一区二区三区在线看| 亚洲va中文在线播放免费| 日韩欧美久久| 91精品91| 福利一区视频| 69堂精品视频在线播放| 在线日韩一区| 欧美视频二区| 国产精品88久久久久久| 国产一区二区三区四区五区 | 国产偷自视频区视频一区二区| 国产精品久久久亚洲一区| 亚洲一区二区三区高清| а√在线中文在线新版| 午夜性色一区二区三区免费视频| 日韩一区自拍| 久久av中文| 免费在线看一区| 日韩高清中文字幕一区二区| 欧美日本三区| 欧美在线亚洲综合一区| 成人污污视频| 久久国产精品免费精品3p| 欧美日韩精品一本二本三本| 91亚洲国产| 国产欧美综合一区二区三区| 免费在线观看精品| 免费视频亚洲| 激情自拍一区| 91精品蜜臀一区二区三区在线 | 综合国产视频| 9色国产精品| 在线天堂资源www在线污| 欧美国产先锋| 国产精品草草| 国产精品2023| 国产精品66| 国产日韩高清一区二区三区在线 | 亚洲69av| 日韩精品久久理论片| 亚洲天堂av资源在线观看| 久久国产精品毛片| 亚洲永久字幕| 日韩在线卡一卡二| 亚洲欧美日韩国产| 国产精品普通话对白| 国产美女高潮在线| 日韩免费视频| 欧洲亚洲一区二区三区| 成人午夜精品| 日产精品一区| 欧美日韩在线播放视频| 欧美精品羞羞答答| 国产视频一区在线观看一区免费| 黑丝一区二区| 久久不射网站| 色婷婷成人网| 日韩精品国产欧美| 国产亚洲欧美日韩精品一区二区三区| 欧美综合社区国产| 精品国产不卡| 国产精品二区不卡| 久久久噜噜噜| 精品一区亚洲| 老牛国产精品一区的观看方式| 蜜臀国产一区二区三区在线播放| 蜜桃一区二区三区在线观看| 中文字幕一区日韩精品| 7m精品国产导航在线| 老司机免费视频一区二区三区| 精品国产99| 久久国产日本精品| 99热精品在线| 日本一区福利在线| 美女毛片一区二区三区四区最新中文字幕亚洲 | 西西人体一区二区| 蜜桃视频一区二区三区在线观看| 日韩黄色免费网站| 九九99久久精品在免费线bt| 日韩中文首页| 99国内精品| 欧美一区久久| 欧美激情国产在线| 国产精品日本| 国产精品香蕉| 91亚洲一区| 午夜欧美视频| 国产情侣久久| 99久久婷婷| 日本不卡在线视频| 日韩国产在线| 一区二区国产在线| 岛国精品一区| 天堂成人国产精品一区| 国产精品亲子伦av一区二区三区 | 亚洲精品三级| 精品一区二区三区免费看| 久久久一二三| 亚洲毛片在线免费| 欧美好骚综合网| 亚洲制服一区| 麻豆理论在线观看| 日本在线视频一区二区| av资源亚洲| 日韩国产欧美三级| 国产99久久| 久久精品xxxxx| 亚洲国产专区校园欧美| 欧美一区在线观看视频| 日本欧美不卡| 日韩一区二区三区精品| 水蜜桃精品av一区二区| 免费久久精品视频| 97精品国产| 日韩中文字幕一区二区三区| 精品国产乱码久久久久久樱花 | 国产模特精品视频久久久久| 麻豆91精品91久久久的内涵| 男人的天堂久久精品| 欧美一级鲁丝片| 久久激情av| 丝袜美腿成人在线| 欧美日韩色图| 成人午夜亚洲| 热久久免费视频| 久久九九99| 精品视频国内| 日韩国产欧美在线播放| 黄色亚洲在线| 日本美女一区| 久久av电影| 日韩成人在线看| 在线视频免费在线观看一区二区| 日本不良网站在线观看| 国产精品日本一区二区三区在线 | 成人亚洲一区二区| 日韩欧美久久| 石原莉奈在线亚洲二区| 欧美日韩亚洲在线观看| 精品五月天堂| 国产精品国产三级在线观看| 日韩有码av| 亚洲涩涩av| 快she精品国产999| 91久久亚洲| 影院欧美亚洲| 久久国产日韩| 新版的欧美在线视频| 日韩.com| 激情国产在线| 国产成人精品一区二区免费看京| 91精品日本| 日韩va欧美va亚洲va久久| 亚洲人成精品久久久| 免费成人在线观看| 在线免费观看亚洲| 一区二区亚洲视频|