1. 程式人生 > >Spring中的Ioc控制反轉與DI註入

Spring中的Ioc控制反轉與DI註入

pan info 1.2 復雜 auto pro size 掃描器 持久層

Spring的控制反轉

  1.spring的介紹

   spring是一款很受歡迎的java開源框架,核心全程圍繞著BeanFactory展開,構成如下圖。

    技術分享圖片   

  2.IOC控制反轉

  2.1定義:把對象創建交給spring管理,不用new的方法,也不用工廠模式

  2.2原理:1.xml配置文件,2.dom4j解析xml,3.工廠設計模式,4.反射

  2.3使用:1.配置文件方式,2.註解方式

  

  3.IOC註入bean管理

   3.1.1 xml配置方式

   1.就是xml配置文件中的spring創建對象的方式,也就是bean標簽的配置

   2.實例化方式:

     2.1:使用類無參構造器(最常用)

    2.2:使用靜態工廠

     2.3:使用實例工廠

   3.1.2 常見屬性

  1.id:起名字根據id屬性值得到配置對象,可以起任意命名,但不能包含特殊符號

   2.class:創建對象所在類的全路徑

   3.scope:1.bean的作用範圍

     2.scope取值:singleton 單例,是默認值

prototype多例

request 將對象存到request域中

session 將對象存到Session域中

globalSession 將對象存到globalSession域

  

  3.1.3屬性註入

   1.創建對象時,設置屬性值

   2.方式:1.使用有參構造器 在bean標簽中使用constructor-arg子標簽

     2.使用set方式(最為常用) 在bean標簽中使用property子標簽

     3.使用接口(基本不用,spring不支持這種方式)

   3.註入復雜類型屬性:Array 使用bean的子標簽property的list子標簽

  List 使用bean的子標簽property 的List 子標簽

  Map 使用 bean 的子標簽 property 的map 子標簽

  Property 使用bean的子標簽property的props子標簽

    4.舉例    

 <!--1. set類型註入-->
<bean id="per" class="com.per">
<property name = "id" value="95001"/>
<property name = "num1" value="003"/>
<property name = "name" value="張小三"/>
</bean>
<bean id="userInfo" class="com.userInfo">
<property name = "username" value="張三"/>
<property name = "number" value="1001"/>
<property name = "p" ref="per"/>
</bean>
<!--2.含有list或者map註入方式-->
<bean id="userInfo" class="com.userInfo">
<property name="username" value="張三"/>
<property name="number" value="1001"/>
<property name="per">
<list>
<value>張三</value>
<value>李四</value>
<value>王五</value>
<value>hello</value>
</list>
</property>
</bean>

  3.2.1 通過註解的方式對bean註入

   1.寫法:@註解名稱(屬性名稱=屬性值),可以在類,方法,屬性上使用註解。

   註解可以替代配置文件,但不可能完全不配置,只是減少配置罷了

   2.開啟註解掃描:在xml中配置<context:compoment-scan base-package=“”></con

Text:compoment-scan>base-package指定包名spring會掃描

  3.創建對象註解:@Component(@Controller:web層,@Service:業務層

    @Repository:持久層這三個註解是component註解的衍生註解,為了是讓標註類本身的用途清晰,目前這四個註解功能是一致的,spring後續版本會對其增強)

    Bean中的scope屬性對應的註解為@Scope,在四個註解下面使用即可

   4.註入屬性的註解:@Autowired根據類名自動找到對應的對象實例

    @Resource(name=”要引入的對象在類註解中value中指定的對象名”)可以指定對象

5.註入屬性的註解例子

5.1 @component,@Controller ,@Service, @Repository註入方式

首先xml文件(定義掃描器)

              <!-- 掃描器 -->
<context:component-scan base-package="/com"/>

技術分享圖片

    描述,裝配時使用的是@value(用來裝配對象屬性)@Autowired(裝配對象域屬性,屬於byType註入)@Resource(“值”)(對象域屬性,屬於byName註入)   @Resource(不帶參數就是byType註入)(註意:@Qualifier(“”)也是byName註入,但是前面必須要有@Autowired)

   5.2 bean的生命始末

   @PostConstruct(初始),@preDestroy(銷毀)(了解內容)

5.3 使用javaconfig來配置(了解內容)

5.4 使用junit4測試(了解內容)

5.5 xml文件配置的優先級比註解的要高

  3.2.2 xml配置文件與註解混合使用

   創建對象使用xml配置文件

  註入屬性使用註解

Spring中的Ioc控制反轉與DI註入