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):
- 提前發現應用程式潛在的問題
- 提高應用執行的性能
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();