控制反轉: 本來我們在實例化一個對象時都會在一個對象(調用者)中使用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();
}
}