Spring中的Ioc控制反轉與DI註入
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註入