更新時間:2018-07-24 來源:黑馬程序員 瀏覽量:
由我們自己實例化的對象交給spring容器來實始化。這時對象的初始化的權利就會反轉。
DI
dependency injection 依賴注入
在spring框架負責創(chuàng)建Bean對象時,動態(tài)將依賴對象注入到Bean組件
IOC/DI區(qū)別
IOC 控制反轉,是指對象實例化權利由spring容器來管理
DI 依賴注入 在spring創(chuàng)建對象的過程中,對象所依賴的屬性通過配置注入對象中。
Spring Bean基本步驟
1.導入相關jar包
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
2.導入相關日志包
commons-logging-1.2.jar
log4j-1.2.16.jar
3.在項目的src目錄下創(chuàng)建applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="userService" class="com.b3a4a.ioc.UserServiceImpl">
<!-- 通過依賴注入將cnB3a4a這個值注到實例對象的info屬性中 -->
<property name="info" value="cnB3a4a"></property>
</bean>
</beans>
注意:
<bean></bean>標簽注意事項
在開發(fā)中可以使用id或name
id它遵守xml規(guī)范,名稱中不能包含特殊符號
name它是為了更好的擴展,在name中可以包含一些特殊符號,例如"_"
4.創(chuàng)建接口(IUserService)和實現(xiàn)類(UserServiceImpl)
public interface IUserService {
public void hello();
}
public class UserServiceImpl implements IUserService {
private String info;
@Override
public void hello() {
System.out.println("hello " + info);
}
//省略get/set方法
......
}
5.獲取對象實例
@Test
public void test(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserService service = (IUserService) applicationContext.getBean("userService");
service.sayHello();
}
上面就是一個基本的使用步驟了,但是這個只是一個最基本的入門,那么接下來咱們則開始給大家一點點的引入
首先,大家需要明確一個問題,那就是我們這個Spring Bean這塊的作用是什么?
很簡單,就是我們相關對象以前是通過自己new 對象的形式來創(chuàng)建的,現(xiàn)在呢,則改為讓框架統(tǒng)一對咱們的對象進行管理.所以咱們先來看下在Spring中,我們的對象究竟是有誰來創(chuàng)建的.當然.說簡單點,其實底層實現(xiàn)起來是通過 解析xml配置文件+反射+工廠模式來實現(xiàn)的, 而我們在使用的過程中,我們真正需要了解的就是所謂的對象是通過哪些工廠來實現(xiàn)的呢?
1)BeanFactory
2)ApplicationContext
3)ClassPathXmlApplicationContext
4)FileSystemXmlApplicationContext
5)WebApplicationContext
他們之間的關系
BeanFactory(根接口) --> ApplicationContext(子接口)
至于ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,WebApplicationContext則是一個個具體的實現(xiàn)類,當然這里先和大家說聲,真實開發(fā)中都是使用
WebApplicationContext來實例化咱們的spring bean容器,但是這個工廠我們不需要自己去創(chuàng)建,通過一些配置,我們就能讓這個對象在咱們項目啟動的時候自動初始化~
創(chuàng)建工廠的方式
a)通過BeanFactory來獲取
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
b)通過ClassPathXmlApplicationContext來獲取
ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
c)通過FileSystemXmlApplicationContext來獲取
ApplicationContext factory = new FileSystemXmlApplicationContext("src/applicationContext.xml");
通過工廠獲取實例對象
IBean bean = (IBean) factory.getBean("bean");
但是這里有一個小小的知識點需要告訴大家,BeanFactory是延遲加載,ApplicationContext是加載配置文件的時候加載
ok.那么到此為止,咱們對Springbean這塊有了個基本認識,下次的話就給大家去聊下如何玩轉ioc和di(xml和注解的方式)
首發(fā):http://java.itheima.com/