教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Spring之Spring Bean

更新時間:2018年07月25日10時03分 來源:傳智播客 瀏覽次數(shù):

IOC          inversion of Controller 控制反轉(zhuǎn)。
由我們自己實例化的對象交給spring容器來實始化。這時對象的初始化的權(quán)利就會反轉(zhuǎn)。

DI                dependency injection 依賴注入
在spring框架負責創(chuàng)建Bean對象時,動態(tài)將依賴對象注入到Bean組件

IOC/DI區(qū)別
                IOC 控制反轉(zhuǎn),是指對象實例化權(quán)利由spring容器來管理
                DI 依賴注入 在spring創(chuàng)建對象的過程中,對象所依賴的屬性通過配置注入對象中。


Spring Bean基本步驟

1.導入相關(guān)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.導入相關(guān)日志包

        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這塊的作用是什么?
很簡單,就是我們相關(guān)對象以前是通過自己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

他們之間的關(guān)系
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這塊有了個基本認識,下次的話就給大家去聊下如何玩轉(zhuǎn)ioc和di(xml和注解的方式)



作者:傳智播客
javaEE培訓學院
0 分享到:
和我們在線交談!