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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM