Java EE--Spring:bean的三種實例化方式

控制反轉: 本來我們在實例化一個對象時都會在一個對象(調用者)中使用new運算符創建一個對象,但在用了spring框架後便將創建對象的控制權交給了Spring容器,這就叫做控制反轉。
依賴注入: 本質跟控制反轉一樣,只是描述的角度不同。調用者交出了其創建對象的控制權,所以自己本身就不能在創建所依賴(需要)的對象,這樣他在使用依賴的對象時就需要靠spring容器來注入,稱爲依賴注入。

Spring就是一個創建和管理bean對象的大工廠,其創建工廠主要有有三種方式,代碼示例如下:

要管理的bean及其接口

package com.mfs.chapter01;

public interface UserDao {

	public void say();
}

package com.mfs.chapter01;

public class UserDaoImpl implements UserDao {

	@Override
	public void say() {
		// TODO Auto-generated method stub

		System.out.println("UserDao say method!");
	}

}

方法一:構造器實例化
xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ">
    <!-- 構造器實例化 -->
   <bean id="userDao" class="com.mfs.chapter01.UserDaoImpl" scope="singleton"></bean> 
  
    
</beans>

方法二:靜態工廠實例化

靜態共創類

package com.mfs.chapter01;

public class StaticBeanFactory {

	public static UserDao createUserDao() {
		return new UserDaoImpl();
	}
}

xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ">

    <!-- 靜態工廠實例化 -->
    <bean id="userDao" class="com.mfs.chapter01.StaticBeanFactory" factory-method="createUserDao"></bean> 
    
</beans>

方法三:實例工廠實例化

實例工廠類

package com.mfs.chapter01;

public class BeanFactory {

	public UserDao createUserDao() {
		
		return new UserDaoImpl();
	}
}

xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ">
   
    <!-- 實例工廠實例化 -->
    <bean id="beanFactory" class="com.mfs.chapter01.BeanFactory"></bean>
    <bean id="userDao" class="com.mfs.chapter01.BeanFactory" factory-bean="beanFactory" factory-method="createUserDao"></bean>
    
</beans>

測試類:三種實例化方式都可通過本類測試無需更改

package com.mfs.chapter01;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	@org.junit.Test
	public void test() {
		
		ApplicationContext app = new ClassPathXmlApplicationContext("com/mfs/chapter01/applicationContext.xml");
		UserDao dao = (UserDao)app.getBean("userDao");
		dao.say();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章