亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java Spring IOC用法

2019-11-15 01:19:08
字體:
來源:轉載
供稿:網友
java SPRing IOC用法Java Spring IOC用法Spring IoC

在前兩篇文章中,我們講了java web環境搭建 和 java web項目搭建,現在看下spring ioc在java中的運用,開發工具為Intellij Idea。

1.簡介

IoC(Inversion of Control)通常稱為控制反轉,是Spring框架的核心。即通過Spring容器控制對象之間的依賴關系,而不是對象自己通過new的方式去創建依賴的對象,相對于主動去創建對象,這種失去對對象的控制便叫做控制反轉,控制反轉用另一種角度描述或者更好的一種理解方式來講,便是DI(Dependency Injection)依賴注入,對象只需關注業務邏輯本身即可,而不需關注依賴的對象從哪里來,交給容器注入即可,從而降低程序之間的耦合度。

2.用法

依賴注入在spring中有兩種配置方式,一是xml配置Bean的方式,二是自動裝配檢測Bean

  • 2.1 xml配置Bean
    • 2.1.1 創建Spring配置我們在web層,web-inf/dispatcher-servlet.xml中注入service層的實現類,加入如下代碼
    <bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" />
    • 2.1.2 在web層controller下調用我們在類里聲明對象,并在方法里調用,這里我們的service層接口類可以聲明為私有屬性,程序可通過@Inject自動搜索xml中的bean配置,注入依賴。
    //   聲明對象 DemoUserServiceImpl實現DemoUserService接口@Inject  private DemoUserService demoUserService;@RequestMapping(value="/index", method = {RequestMethod.GET})public ModelAndView index(){    DemoUserEntity demoUser=demoUserService.GetDemoUser(1);    modelAndView.addObject("demoUser", demoUser);    modelAndView.setViewName("home");    return modelAndView;}

    我們在屬性前加了@Inject,這里依賴javax.inject.Inject包 ,在模塊pom里加入如下依賴即可

        <dependency>        <groupId>javax.inject</groupId>        <artifactId>javax.inject</artifactId>    </dependency>
    • 2.1.3 屬性的依賴注入

    如果我們想在service層依賴注入調用dao層對象操作數據庫,則跟service層類似,我們在web層的web-inf/dispatcher-servlet.xml注入dao層的實現,加入如下代碼

    <bean id="demoUserDao" class="com.ganji.demo.dao.gcrm.hibernate.DemoUserDaoHibernate"></bean><bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" autowire="byType">    <property name="demoUserDao" ref="demoUserDao"></property></bean>

    ref指像bean的實現類,如果是值類型或String類型可以用value指定,設定值即可,如value=5。在service層,我們可以在DemoUserServiceImpl層里聲明demoUserDao私有屬性,并公開屬性set方法,然后調用

      //聲明屬性private DemoUserDao demoUserDao;//通過屬性的set方法,注入對象public void setDemoUserDao(DemoUserDao demoUserDao){    this.demoUserDao=demoUserDao;}public DemoUserEntity GetDemoUser(int id) {    return demoUserDao.getDemoUser(id);}
    • 2.1.4 構造器注入

    構造器注入類似于屬性注入,在xml中用constructor-arg來指定,這里我們在web層的web-inf/dispatcher-servlet.xml配置如下

    <bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" autowire="byType">    <constructor-arg name="demoUserDao" ref="demoUserDao"></constructor-arg>    <constructor-arg name="userName" value="張三"></constructor-arg></bean>

    在service層,我們創建構造函數

    private DemoUserDao demoUserDao;private String userName;public DemoUserServiceImpl(DemoUserDao demoUserDao,String userName){   this.demoUserDao=demoUserDao;   this.userName=userName;}//在方法里既可以調用了,如下代碼 public DemoUserEntity GetDemoUser(int id) {    System.out.println("execute service getdemouser "+userName);    return demoUserDao.getDemoUser(id);}
    • 2.1.5 小結如果我們不想在xml中配置屬性注入或者構造器注入,我們可以在聲明的屬性上,添加@Inject注解,類似2.1.2中demoUserService的實現,這樣Spring框架會自動搜索bean對應的實現類,可以在bean處設置根據名稱或類型,即autowire="byType" or autowire="byName",也可以全局設置,即在根目錄beans下面聲明default-autowire="byName",具體如下。
    <beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation=" http://www.springframework.org/schema/beans"   default-autowire="byName"    >
  • 2.2自動裝配檢測Bean

    如果每個實現類都要配置bean元素的話,項目如果很大的情況下,太多的bean,xml文件的bean管理配置就成了一個問題,很慶幸的事,spring提供了自動裝配檢測bean注入依賴的功能。

    • 2.2.1 自動檢測標注bean

    我們依賴<context:component-scan>查找使用注解所標注的類,這些注解如下

    @Component --通用的構造性注解,標識該類為Spring組件 @Controller --標識將該類定義為Spring MVC Controller 這里我們用在web層 @Service --標識將該類定義為服務,這里我們用在Service層 @Repository --標識將該類定義為數據倉庫,這里我們用在Dao層

    具體用法如下圖示例

    web層調用@Controllerpublic class HelloWorldController {

    service層調用@Servicepublic class DemoUserServiceImpl implements DemoUserService {

    dao層調用@Repositorypublic class DemoUserDaoHibernate implements DemoUserDao {

    注解后,我們需要在web層的web-inf/dispatcher-servlet.xml配置組件掃描<context:component-scan>,分別掃描web、service。dao層,具體如下

     <!-- 開啟controller注解支持 --><!-- use-default-filters="false" 只掃描指定的注解 --><context:component-scan base-package="com.ganji.demo.web.controller" use-default-filters="false">    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><!--服務層自動依賴注入--><context:component-scan base-package="com.ganji.demo.service">    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /></context:component-scan><!--Dao層依賴注入--><context:component-scan base-package="com.ganji.demo.dao">    <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" /></context:component-scan>

    同時,我們需要在xml命名空間里加入context支持,xmlns:context="http://www.springframework.org/schema/context"和相應的xsi具體如下

    <?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:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"        default-autowire="byName"    >
    • 2.2.2 使用自動注入的bean

    上一步配置好后,我們只需要聲明調用對象的屬性即可,如下web層如下

    //   聲明對象 DemoUserServiceImpl實現DemoUserService接口@Inject  private DemoUserService demoUserService;@RequestMapping(value="/index", method = {RequestMethod.GET})public ModelAndView index(){    DemoUserEntity demoUser=demoUserService.GetDemoUser(1);    modelAndView.addObject("demoUser", demoUser);    modelAndView.setViewName("home");    return modelAndView;}

    service層如下

    @Injectprivate DemoUserDao demoUserDao;public DemoUserEntity GetDemoUser(int id) {    return demoUserDao.getDemoUser(id);}
    • 2.2.3 總結

    按2.2.1和2.2.2配置操作后,即可實現自動檢查依賴注入bean,不用在xml中配置繁瑣的bean元素,由框架通過反射自動尋找對象實現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美视频一区二区三区| 欧美激情性做爰免费视频| 91国产美女在线观看| 日韩av电影在线免费播放| 亚洲精品福利视频| 亚洲最大激情中文字幕| 欧美精品999| 国产亚洲精品久久| 97国产suv精品一区二区62| 欧美乱妇40p| 97超级碰碰碰久久久| 久久影院资源网| 91国产精品91| 国产精品99免视看9| 日韩精品欧美国产精品忘忧草| 久久精品久久久久久国产 免费| 色偷偷91综合久久噜噜| 日本aⅴ大伊香蕉精品视频| 国产精品成人aaaaa网站| 国产精品视频xxx| 欧美大片大片在线播放| 精品女同一区二区三区在线播放| 国产精品免费电影| 国产精品va在线播放我和闺蜜| 欧美激情网站在线观看| 丝袜美腿亚洲一区二区| www.亚洲一区| 在线视频国产日韩| 不卡伊人av在线播放| 精品国偷自产在线视频| 亚洲天堂av图片| 国产91色在线|免| 欧美大学生性色视频| 亚洲免费伊人电影在线观看av| 疯狂蹂躏欧美一区二区精品| 亚洲天堂av电影| 91精品国产乱码久久久久久久久| 欧美亚洲成人精品| 成人亚洲激情网| 亚洲精品视频在线观看视频| 成人激情黄色网| 亚洲剧情一区二区| 自拍偷拍亚洲一区| 日韩av片永久免费网站| 在线观看欧美日韩| 国产日韩欧美夫妻视频在线观看| 黑人巨大精品欧美一区二区三区| 欧美国产亚洲精品久久久8v| 色综合久久久888| 欧美视频一区二区三区…| 在线观看不卡av| 欧美日韩国产精品专区| 欧美黄色小视频| 国产成人精品网站| 欧美老女人性生活| 亚洲一区二区免费| 97精品国产97久久久久久春色| 国产精品成av人在线视午夜片| 国产精品福利在线| 久久精品久久久久久国产 免费| 欧美性xxxx18| 精品国产视频在线| 国模吧一区二区| 91精品久久久久久久久青青| 欧美日韩国产综合视频在线观看中文| 国语自产精品视频在线看抢先版图片| 欧美一区二区影院| 亚洲欧美日韩在线一区| 国产精品久久久久久久久| 亚洲美女视频网| 亚洲一区二区三区四区视频| 色婷婷成人综合| 奇门遁甲1982国语版免费观看高清| 国产在线精品一区免费香蕉| 日本成人黄色片| 国产精品久久久久久久久免费看| 欧美性极品xxxx娇小| 热久久免费视频精品| 91精品国产99| 亚洲网站在线播放| 在线播放日韩精品| 国产999在线| 91精品久久久久久久久不口人| 午夜精品久久久久久久99热浪潮| 国产精品欧美久久久| 国产精品久久久久久久久久久久久| 欧美一级在线亚洲天堂| 欧美壮男野外gaytube| 日韩有码视频在线| 亚洲色图激情小说| 国产精品香蕉在线观看| 亚洲一区久久久| 97在线视频观看| 亚洲人成电影在线播放| 性欧美长视频免费观看不卡| 日韩免费电影在线观看| 国产成人精品日本亚洲专区61| 成人做爰www免费看视频网站| 91免费国产视频| 岛国av一区二区| 久久久噜噜噜久久| 91中文在线视频| 国产91精品最新在线播放| 欧美激情亚洲另类| 久久久成人的性感天堂| 亚洲人成电影在线| 国产精品狼人色视频一区| 91精品国产自产在线老师啪| 亚洲精品一区中文字幕乱码| 亚洲欧美精品一区| 国产亚洲a∨片在线观看| 日韩高清电影免费观看完整版| 成人福利在线视频| 欧美日韩亚洲一区二区| 久久久国产精品视频| 黑人巨大精品欧美一区二区免费| 亚洲毛片在线观看| 欧美黑人一区二区三区| 精品成人在线视频| 国产亚洲在线播放| 欧美大片大片在线播放| 欧美性猛交xxxx乱大交极品| 亚洲国产精品99久久| 久久视频这里只有精品| 亚洲欧美视频在线| 在线观看精品自拍私拍| 欧美一级淫片aaaaaaa视频| 成人免费网站在线| 欧美午夜电影在线| 精品香蕉一区二区三区| 国产欧美在线播放| 日本亚洲欧洲色α| 亚洲免费电影在线观看| 中文字幕日韩免费视频| 久久伊人91精品综合网站| 亚洲一级片在线看| 国产精品久久久久av| 久久久女人电视剧免费播放下载| 国产精品久久久久久久久| 日本亚洲欧洲色α| 2019中文字幕在线免费观看| 国产美女被下药99| 欧美激情精品久久久久久大尺度| 成人激情视频在线播放| 91成人在线视频| 91av视频在线观看| 国产精品久久久久久久久久久久久| 亚洲国产欧美精品| 国产精品视频久久久久| 亚洲视频一区二区三区| 亚洲国产成人精品一区二区| 国产成人啪精品视频免费网| 国产亚洲在线播放| 亚洲影影院av| 成人国内精品久久久久一区| 国产精品v片在线观看不卡| 国模精品视频一区二区三区| 日韩美女免费观看| 精品女厕一区二区三区| 欧洲一区二区视频| 欧美一级淫片videoshd| 九九热精品视频在线播放| 亚洲成色999久久网站| 按摩亚洲人久久|