全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

網(wǎng)上商城實(shí)戰(zhàn)篇之前臺(tái)商品信息的顯示

更新時(shí)間:2018-07-24 來(lái)源:黑馬程序員 瀏覽量:

IOC
          inversion of Controller 控制反轉(zhuǎn)。

由我們自己實(shí)例化的對(duì)象交給spring容器來(lái)實(shí)始化。這時(shí)對(duì)象的初始化的權(quán)利就會(huì)反轉(zhuǎn)。

DI
                dependency injection 依賴(lài)注入
在spring框架負(fù)責(zé)創(chuàng)建Bean對(duì)象時(shí),動(dòng)態(tài)將依賴(lài)對(duì)象注入到Bean組件

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


Spring Bean基本步驟

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

        commons-logging-1.2.jar
        log4j-1.2.16.jar
        
3.在項(xiàng)目的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"> 
                        <!-- 通過(guò)依賴(lài)注入將cnB3a4a這個(gè)值注到實(shí)例對(duì)象的info屬性中 -->
                        <property name="info" value="cnB3a4a"></property> 
                </bean>
        </beans>
        
        注意:
        
        <bean></bean>標(biāo)簽注意事項(xiàng)
        
                在開(kāi)發(fā)中可以使用id或name 
                id它遵守xml規(guī)范,名稱(chēng)中不能包含特殊符號(hào)                 
                name它是為了更好的擴(kuò)展,在name中可以包含一些特殊符號(hào),例如"_"


4.創(chuàng)建接口(IUserService)和實(shí)現(xiàn)類(lèi)(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.獲取對(duì)象實(shí)例

        @Test
        public void test(){
                ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
                IUserService service = (IUserService) applicationContext.getBean("userService");
                service.sayHello();
        }


上面就是一個(gè)基本的使用步驟了,但是這個(gè)只是一個(gè)最基本的入門(mén),那么接下來(lái)咱們則開(kāi)始給大家一點(diǎn)點(diǎn)的引入

首先,大家需要明確一個(gè)問(wèn)題,那就是我們這個(gè)Spring Bean這塊的作用是什么?
很簡(jiǎn)單,就是我們相關(guān)對(duì)象以前是通過(guò)自己new 對(duì)象的形式來(lái)創(chuàng)建的,現(xiàn)在呢,則改為讓框架統(tǒng)一對(duì)咱們的對(duì)象進(jìn)行管理.所以咱們先來(lái)看下在Spring中,我們的對(duì)象究竟是有誰(shuí)來(lái)創(chuàng)建的.當(dāng)然.說(shuō)簡(jiǎn)單點(diǎn),其實(shí)底層實(shí)現(xiàn)起來(lái)是通過(guò) 解析xml配置文件+反射+工廠模式來(lái)實(shí)現(xiàn)的, 而我們?cè)谑褂玫倪^(guò)程中,我們真正需要了解的就是所謂的對(duì)象是通過(guò)哪些工廠來(lái)實(shí)現(xiàn)的呢?

1)BeanFactory
2)ApplicationContext
3)ClassPathXmlApplicationContext
4)FileSystemXmlApplicationContext
5)WebApplicationContext

他們之間的關(guān)系
BeanFactory(根接口)        -->                ApplicationContext(子接口)        
至于ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,WebApplicationContext則是一個(gè)個(gè)具體的實(shí)現(xiàn)類(lèi),當(dāng)然這里先和大家說(shuō)聲,真實(shí)開(kāi)發(fā)中都是使用
WebApplicationContext來(lái)實(shí)例化咱們的spring bean容器,但是這個(gè)工廠我們不需要自己去創(chuàng)建,通過(guò)一些配置,我們就能讓這個(gè)對(duì)象在咱們項(xiàng)目啟動(dòng)的時(shí)候自動(dòng)初始化~


創(chuàng)建工廠的方式
        
    a)通過(guò)BeanFactory來(lái)獲取
          BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
    b)通過(guò)ClassPathXmlApplicationContext來(lái)獲取
         ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    c)通過(guò)FileSystemXmlApplicationContext來(lái)獲取
         ApplicationContext factory = new FileSystemXmlApplicationContext("src/applicationContext.xml");

通過(guò)工廠獲取實(shí)例對(duì)象

                IBean bean = (IBean) factory.getBean("bean");

但是這里有一個(gè)小小的知識(shí)點(diǎn)需要告訴大家,BeanFactory是延遲加載,ApplicationContext是加載配置文件的時(shí)候加載

ok.那么到此為止,咱們對(duì)Springbean這塊有了個(gè)基本認(rèn)識(shí),下次的話(huà)就給大家去聊下如何玩轉(zhuǎn)ioc和di(xml和注解的方式)
 

作者:黑馬程序員javaEE培訓(xùn)學(xué)院

首發(fā):http://java.itheima.com/

 

   

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!