spring容器创建bean对象的方式

xml文件中有bean的配置,而且这个bean所对应的java类中存在一个无参构造器

那么这个时候spring容器就可以使用反射调用无参构造器来创建实例了(常规的方式)

通过工厂类获得实例(工厂类实现了接口FactoryBean<?>
注意spring中的PropertyPlaceholderConfigurer类的使用,在htmlsingle中直接搜索类名即可
例如:

//工厂类实现指定接口并且实现接口中的三个抽象方法:
public class ConnectionFactory implements FactoryBean<Connection>{
private String driver;
private String url;
private String username;
private String password;

@Override
public Connection getObject() throws Exception {
Class.forName(driver);
Connection conn = 
DriverManager.getConnection(url,username,password);
return conn;
}

@Override
public boolean isSingleton() {
return false;
}

@Override
public Class<Connection> getObjectType() {
return Connection.class;
}
set/get
....
}

xml文件:

下面配置的这个类,可以自动的帮我们去读取指定的properties文件的内容,文件中用key-value的形式存放数据
读完之后我们就可以用${key}这种形式去拿文件中的value值了

在htmlsingle中直接搜索类名即可得到相关配置样例

classpath指的是从src下面找.

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:oracle.properties</value>
</property>
</bean>

因为这个类是一个工厂类,所以我们用名字conn在容器中拿对象的时候,
拿到并不是这个工厂类对象,而是这个工厂类对象调用完工厂方法后所返回的对象.

<bean name="conn" class="com.briup.ioc.factory.ConnectionFactory">
<property name="driver">
<value>${driver}</value>
</property>

<property name="url">
<value>${url}</value>
</property>

<property name="username">
<value>${username}</value>
</property>

<property name="password">
<value>${password}</value>
</property>
</bean>

main:

String path = "com/briup/ioc/factory/factory.xml";
ApplicationContext container = 
new ClassPathXmlApplicationContext(path);
Connection conn = 
(Connection)container.getBean("conn");

System.out.println(conn);

通过实例工厂获得bean对象(不需要实现或者继承任何接口或者父类),就是一个普通的工厂实例instanceFactory

//一个普通的工厂类 
public class ConnectionFactory{
private String driver;
private String url;
private String username;
private String password;

public Object getConnection() throws Exception {
Class.forName(driver);
Connection conn = 
DriverManager.getConnection(url,username,password);
return conn;
}
get/set
....
}

xml文件:

<!-- 读取properties文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:oracle.properties</value>
</property>
</bean>
<!-- 配置工厂类 --> <bean name="factory" class="com.briup.ioc.instanceFactory.ConnectionFactory"> <property name="driver"> <value>${driver}</value> </property> <property name="url"> <value>${url}</value> </property> <property name="username"> <value>${username}</value> </property> <property name="password"> <value>${password}</value> </property> </bean> <!-- 将来通过这个conn来拿对象,拿到的是名字为factory的工厂类调用完名字为getConnection方法之后所返回的对象。--> <bean name="conn" factory-bean="factory" factory-method="getConnection"></bean>

main:

String path = "com/briup/ioc/instanceFactory/instanceFactory.xml";
ApplicationContext container = 
new ClassPathXmlApplicationContext(path);

Connection conn = 
(Connection)container.getBean("conn");

System.out.println(conn); 

通过静态工厂获得实例
例如

//静态工厂类
public class ConnectionFactory{
private static String driver = 
"oracle.jdbc.driver.OracleDriver";
private static String url = 
"jdbc:oracle:thin:@127.0.0.1:1521:XE";
private static String username = "briup";
private static String password = "briup";

public static Object getConnection() throws Exception {
Class.forName(driver);
Connection conn = 
DriverManager.getConnection(url,username,password);
return conn;
}
}

xml文件:

<!-- 这样配置一定要求getConnection方法是静态方法 -->
<bean name="conn" class="com.briup.ioc.staticFactory.ConnectionFactory" factory-method="getConnection"></bean>

main:

String path = "com/briup/ioc/staticFactory/staticFactory.xml";
ApplicationContext container = 
new ClassPathXmlApplicationContext(path);

Connection conn = 
(Connection)container.getBean("conn");

System.out.println(conn);
相关文章
相关标签/搜索
神算子心水高手论坛精选一肖 陇川县| 老河口市| 临江市| 汝阳县| 横山县| 汾阳市| 沽源县| 葵青区| 海原县| 绥江县| 云南省| 彰武县| 兴仁县| 黄浦区| 宣恩县| 洛南县| 大洼县| 乌拉特前旗| 福泉市| 彩票| 衡南县| 廊坊市| 新津县| 禹城市| 轮台县| 福州市| 红原县| 云南省| 五河县| 靖安县| 石台县| 襄城县| 县级市| 麻栗坡县| 鸡东县| 朔州市| 临澧县| 宜兴市| 雷州市| 嘉定区| 蒲江县| 铜梁县| 青浦区| 石景山区| 辉县市| 营山县| 邛崃市| 崇左市| 额济纳旗| 苍梧县| 新龙县| 临海市| 楚雄市| 肥东县| 阿合奇县| 且末县| 奉新县| 水城县| 桑植县| 古蔺县| 阳谷县| 津市市| 桐城市| 徐水县| 垣曲县| 奉节县| 榆树市| 田林县| 墨脱县| 龙泉市| 临江市| 阜阳市| 德江县| 浦北县| 兴国县| 阿拉善左旗| 鹤壁市| 海阳市| 同德县| 萨嘎县| 武平县| 宣威市| 介休市| 上高县| 西吉县| 东乡族自治县| 杭锦后旗| 海兴县| 两当县| 克拉玛依市| 黄陵县| 新丰县| 惠安县| 彭阳县| 会昌县| 大厂| 普宁市| 富锦市| 民权县| 遵义县| 伊宁县| 乌审旗| 台州市| 凤冈县| 阳山县| 通城县| 苏尼特右旗| 仙居县| 岱山县| 西畴县| 屯留县| 铁岭市| 射洪县| 乌什县| 古浪县| 康乐县| 成都市| 美姑县| 凤庆县| 株洲县| 海门市| 沁源县| 嘉黎县| 雷山县| 临沂市| 南皮县| 泰安市| 临夏县| 清苑县| 东城区| 阜新市| 徐州市| 集安市| 肥乡县| 赤城县| 嵩明县| 济宁市| 泰和县| 景谷| 石景山区| 马山县| 延吉市| 保定市| 康马县| 香河县| 容城县| 临猗县| 科尔| 镶黄旗| 德钦县| 秭归县| 建阳市| 社会| 佛学| 张掖市| 江源县| 阳山县| 清水县| 宁城县| 康平县| 斗六市| 巫溪县| 东至县| 霍林郭勒市| 杭锦旗| 博乐市| 上思县| 松桃| 遂宁市| 出国| 偏关县| 新安县| 凌云县| 武定县| 屯门区| 高尔夫| 宜宾市| 宕昌县| 绵竹市| 河南省| 阳原县| 碌曲县| 中牟县| 东城区| 邳州市| 宁河县| 霞浦县| 白朗县| 象山县| 三门县| 镇江市| 绥芬河市| 兴仁县| 漯河市| 衡阳县| 周宁县| 漾濞| 饶阳县| 都江堰市| 勐海县| 海城市| 石首市| 龙陵县| 武威市| 班玛县| 军事| 恩平市| 霞浦县| 嫩江县| 静宁县| 仁化县| 乌拉特中旗| 佛教| 正定县| 霍山县| 盐边县| 永登县| 东辽县| 金寨县| 福安市| 六安市| 临安市| 青田县| 灌南县| 财经| 论坛| 宁安市| 邵阳市| 碌曲县| 大洼县| 山东省| 普定县| 阿合奇县| 敦煌市| 天峻县| 普安县| 邵东县| 长沙县| 长丰县| 凉山| 襄汾县| 高陵县| 邳州市| 文山县| 永康市| 永福县| SHOW| 金沙县| 墨竹工卡县| 库伦旗| 分宜县| 东平县| 临朐县| 海门市| 灵寿县| 青神县| 修水县| 淮滨县| 青铜峡市| 文登市| 花莲县| 玉山县| 荔波县| 大兴区| 五台县| 静安区| 鹿邑县| 方城县| 罗源县| 临洮县| 恩平市| 溧阳市| 六枝特区| 临江市| 武宣县| 二手房| 东明县| 奇台县| 乐东| 新兴县| 白河县| 桃园市| 乌苏市| 洛扎县| 秭归县| 翁牛特旗| 马龙县| 怀远县| 鸡东县| 锦屏县| 塔城市| 明水县| 浏阳市| 历史| 海原县| 视频| 凤山县| 日土县| 驻马店市| 德化县| 莱西市| 合肥市| 宣武区| 萍乡市| 马关县| 乌兰浩特市| 桑日县| 石狮市| 万山特区| 靖边县| 阿合奇县| 伊宁县| 安康市| 盐池县| 宣武区| 澳门| 遂宁市| 新田县| 辽阳县| 襄汾县| 河源市| 廊坊市| 武陟县| 隆子县| 丰宁| 涪陵区| 皋兰县| 太湖县| 定安县| 山丹县| 柞水县| 肃南| 林州市| 四平市| 千阳县| 山东省| 东乡族自治县| 罗定市| 青龙| 锦屏县| 肥西县| 仙桃市| 张家界市| 东平县| 渝中区| 永登县| 玛多县| 马关县| 揭西县| 沂水县| 晋州市| 苍梧县| 苏尼特左旗| 马公市| 秦皇岛市| 莱州市| 夹江县| 工布江达县| 时尚| 永川市| 华池县| 汝南县| 郎溪县| 阿鲁科尔沁旗| 鄂托克前旗| 镇江市| 雷山县| 怀宁县| 台中市| 余江县| 红河县| 离岛区| 深州市| 突泉县| 长汀县| 延吉市| 松溪县| 介休市| 临夏县| 新密市| 盖州市| 岐山县| 凤阳县| 石渠县| 左云县| 安化县| 思南县| 罗甸县| 格尔木市| 鄯善县| 庆城县| 新宾| 双流县| 金寨县| 平定县| 广汉市| 光泽县| 陇南市| 松原市| 那曲县| 廊坊市| 云霄县| 揭东县| 崇文区| 延津县| 徐闻县| 旺苍县| 潞西市| 南漳县| 泗洪县| 乌什县| 临高县| 建始县| 安庆市| 安塞县| 兴城市| 潢川县| 潞西市| 康保县| 吉水县| 隆昌县| 青河县| 西宁市| 赤水市| 桂平市| 神农架林区| 万宁市| 乳山市| 杭锦后旗| 云龙县| 佛山市| 乌拉特中旗| 西贡区| 金寨县| 长沙市| 云阳县| 贡觉县| 尼木县| 资阳市| 双流县| 盐山县| 水城县| 邹平县| 黑龙江省| 武功县| 临江市| 潮州市| 壶关县| 原阳县| 崇州市| 托克逊县| 栾川县| 沈阳市| 新余市| 方正县| 克什克腾旗| 扶沟县| 蒙阴县| 吉林省| 保亭| 沂水县| 双江| 望江县| 松桃| 囊谦县| 库尔勒市| 乌兰察布市| 五台县| 莱州市| 商水县| 崇义县| 广水市| 信阳市| 石城县| 平谷区| 洛川县| 增城市| 鄂伦春自治旗| 页游| 登封市| 黔东| 阳原县| 桐梓县| 屏东市| 调兵山市| 苏尼特右旗| 沂南县| 宿松县| 定襄县| 乾安县| 玛纳斯县| 平乐县| 怀宁县| 皋兰县| 吉隆县| 富阳市| 靖州| 胶州市| 红河县| 苗栗县| 唐山市| 七台河市| 平阳县| 砀山县| 德惠市| 吉木萨尔县| 新乡市| 双鸭山市| 辽中县| 马关县| http://www.gz1980edgec.fun http://m.bo2020weekends.fun http://www.gz1980appropriatec.fun http://m.bo2020cards.fun http://www.yqo9j5rl5v.fun http://www.gz1980draftc.fun http://wap.gz1980volunteerc.fun http://www.yqo6j3rl4v.fun http://wap.yqo7j6rl8v.fun http://www.gz1980tapec.fun http://wap.gz1980potterc.fun http://m.bo2020rows.fun http://www.yqo5j7rl8v.fun http://wap.yqo5j1rl9v.fun http://www.gz1980runc.fun