天天看點

Spring IOC 配置總結Spring IOC手動對象依賴注入自動對象的依賴注入Bean标簽屬性

Spring IOC

手動對象依賴注入

一、添加 IOC 核心坐标

​ pom.xml 檔案中引入架包

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>


    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.8.1</version>
    </dependency>
           

二、基本的xml配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="userDao" class="com.dzy.Dao.userDao"></bean>
    <bean id="對象的唯一辨別" class="業務對象全路徑"></bean>
    
</beans>
           

三、Set注入

标簽:

property

屬性:

name

業務類中屬性名

ref

引用類型唯一辨別

value

基本類型指派

注:屬性須提供Set方法

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="userService" class="com.dzy.Service.userService">
    <bean id="userDao" class="com.dzy.Dao.userDao">
    	<property name="userService" ref="userService"></property>
        <property name="userName" value="admin"></property>
    </bean>
        
    <bean id="對象的唯一辨別" class="業務對象全路徑">
        <property name="userService" ref="引用類型唯一辨別"></property>
        <property name="userName" value="值"></property>
     </bean>
    
</beans>
           

四、構造器注入

标簽:

constructor-arg

一個construtor-arg标簽對應構造器的參數

屬性:

name

業務類中屬性名

ref

引用類型唯一辨別

value

基本類型指派

注:循環引用時通過set注入解決

<bean id="goodsDao" class="com.dzy.dao.GoodsDao">
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    <constructor-arg name="name" value="admin"></constructor-arg>
</bean>
           

GoodDao代碼

package com.dzy.dao;

public class GoodsDao {
    private UserDao userDao;
    private String name;

    public GoodsDao() {
    }

    public GoodsDao(UserDao userDao, String name) {
        this.userDao = userDao;
        this.name = name;
    }
	
    public void test(){
        System.out.println("Godds...test"+","+name);
        userDao.test();
    }
}

           

自動對象的依賴注入

環境引入配置xml檔案

xmlns:context=“http://www.springframework.org/schema/context”

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

<?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/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
	
   <!-- 配置掃描包範圍-->
    <context:component-scan base-package="com.dzy"/>
    
</beans>
           

通過注解實作

自動裝配注解:

@Resource

聲明級别: 類級别 屬性級别 方法級别 常用 屬性(推薦) | 方法(Set 方法)

裝配規則:

預設按照屬性名裝配

如果屬性名對應的Bean 對象未找到 使用類型(Class 類型)實作裝配

如果顯式的聲明Resource 的name 的value 值 内部裝配按照value 執行裝配 如果存在該value 對應的對象裝配成功 如果不存在裝配失敗

如果接口存在多個實作時 需要顯式的聲明name 的value ,根據value 實作裝配

@Autowired

聲明級别: 常用 屬性級别(推薦) 構造器 set

裝配規則: 預設按照class 類型執行裝配 如果按照名稱實作裝配 可以配合Qualifier 注解 聲明value 值

自動裝配bean對象:

聲明級别:類級别

​ 持久層(dao層):

@Repository

​ 業務層(Service):

@Service

​ 視圖層(Controller):

@Controller

​ 元件:

@Component

Bean标簽屬性

lazy-init

: 懶加載

預設值:false 容器啟動時 Bean對象就會執行個體化 (存在單例緩存池)

​ true 容器啟動時 不會執行個體化,使用時才會對對象執行個體化

作用(false):

  1. 提前發現應用程式潛在的問題
  2. 提高應用執行的性能

scope

:作用域

預設值:singleton 緩存到單例緩存池

​ prototype 不會緩存到緩存池,每次調用都建立一個新的bean并傳回

銷毀bean對象

xml代碼

<bean id="userServiceImpl"class="com.shsxt.service.impl.UserServiceImpl" init-
method="init" destroy-method="destroy"> 
</bean> 
           

java代碼

AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml"); 
ctx.close();