淺談Spring框架的應用
阿新 • • 發佈:2019-01-31
1.Spring是一個輕量級開源框架.
b.AOP程式設計的支援-面向切面程式設計
c.宣告事務的支援
d.整合各種框架
e.方便程式的測試
1)導包4(核心)+1(依賴);
dist--libs--:beans、core、context、expression
dependenices(整合後的)--apache.commons--commons.logging--logging-1.1.1.jar
schema--頭部
/*<bean>:狹義: 類中私有屬性的set/get()
廣義:就是一個實體類*/
2)src下建立配置檔案applicationContext.xml .
6.獲取物件
//配置這裡的每一個bean,Spring容器都會幫我們建立物件,並且給創建出來的物件取一個唯一的標識(id)-- 自己取,沒要求(建議和屬性名一致)
//class="全類名"
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl"></bean>
//取物件
ApplicationContext context=new ClassPathXmlApplicationContext("xml名稱");
ApplicationContext--beanFactory
//id:userBizId:通過表示Id獲取物件
注入:通過第三方來對另一個物件進行例項化
eg:BizImpl 類中有DaoImpl的物件作為屬性.
1)UserBizImpl有另一個類物件名稱-userDao
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
2)<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl">
/*name="userDao": 對應類中需要注入實現的屬性(另一個物件)名稱
ref="userDaoId":對應引用創建出來的物件的標識id
*/
<property name="userDao" ref="userDaoId"></property>
</bean>
8.bean的建立:在主配置檔案中去配置
1.預設無參方法的構造---反射
2.靜態工廠:所有方法都static-注入實現的物件需要set/get()
3.例項工廠: 注入實現的物件需要set/get()
//靜態工廠
<!--靜態工廠 -->
<bean id="userDaoId2" class="com.qf.factory.StaticFactory"factorymethod="createUserDao"></bean>
<!-- 例項工廠:先建立工廠例項,建立物件 -->
1)<!-- 工廠物件 -->
<bean id="userDaoFactory" class="com.qianfeng.factory.UserDaoFactory"></bean>
2)<bean id="userDao3" factory-bean="userDaoFactory" factory-method="createUserDaoImpl"></bean>
9.作用域:用於確定spring建立bean例項個數是否是同一個 <bean>標籤屬性 scope
scope="singleton":單例
scope="prototype":多列
預設是單列
10.屬性的自動依賴注入-autowire
autowire:屬性依賴自動注入
1)autowire="byName":通過名稱來注入,通過類中需要注入實現的物件的名稱與主配置檔案中的bean 的id名稱進行匹配,匹配上就注入
//以userDao去匹配 id的值,匹配上則找到.
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl" autowire="byName">
<!-- <property name="userDao" ref="userDaoId3"></property> -->
</bean>
<bean id="userDao" class="com.qf.dao.impl.UserDaoImpl"></bean>
//通過型別類匹配,匹配出來的是多個類.
<bean autowire="byType">
11.基於註解方式實現bean
<!-- 掃描所有添加了註解的類 -->
<context:component-scan base-package="com.qf">
3)類中:
/*@Component(value="userBiz")*/ //也可以這樣寫元件的註解
@Service(value="userBiz") //分層的註解
@Scope(value="singleton")
public class UserBizImpl implements IUserBiz {
@Resource(name="userName") //這裡的userName對應的是UserDaoImpl中對應的userName
private IUserDao userDao;
/*@Autowired --預設是以byType的方式屬性自動注入
private IUserDao userDao1;*/
public class UserDaoImpl implements IUserDao{}
輕量級:與EJB對比,依賴資源少,銷燬的資源少
2.Spring的核心是控制反轉(IOC)和麵向切面(AOP)
3.Spring的優點:
a.方便解耦:IOC容器,依賴注入方式不必例項化類.b.AOP程式設計的支援-面向切面程式設計
c.宣告事務的支援
d.整合各種框架
e.方便程式的測試
f.降低Java EE API的使用難度
4.IOC:控制反轉,將物件建立的權利轉移到第三方的容器來管理.通過xml檔案方式獲取物件---體現出解耦
5.如何搭建IOC:1)導包4(核心)+1(依賴);
dist--libs--:beans、core、context、expression
dependenices(整合後的)--apache.commons--commons.logging--logging-1.1.1.jar
schema--頭部
/*<bean>:狹義: 類中私有屬性的set/get()
廣義:就是一個實體類*/
2)src下建立配置檔案applicationContext.xml .
3) 編寫xml設定頭部
//配置這裡的每一個bean,Spring容器都會幫我們建立物件,並且給創建出來的物件取一個唯一的標識(id)-- 自己取,沒要求(建議和屬性名一致)
//class="全類名"
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl"></bean>
//取物件
ApplicationContext context=new ClassPathXmlApplicationContext("xml名稱");
ApplicationContext--beanFactory
//id:userBizId:通過表示Id獲取物件
IUserBiz userbiz=(IUserBiz)context.getbean("userBizId");
7.屬性的依賴注入
依賴:一個物件需要使用另一個物件.注入:通過第三方來對另一個物件進行例項化
eg:BizImpl 類中有DaoImpl的物件作為屬性.
1)UserBizImpl有另一個類物件名稱-userDao
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
2)<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl">
/*name="userDao": 對應類中需要注入實現的屬性(另一個物件)名稱
ref="userDaoId":對應引用創建出來的物件的標識id
*/
<property name="userDao" ref="userDaoId"></property>
</bean>
<bean id="userDaoId" class="com.qf.dao.impl.UserDaoImpl"></bean>
1.預設無參方法的構造---反射
2.靜態工廠:所有方法都static-注入實現的物件需要set/get()
3.例項工廠: 注入實現的物件需要set/get()
//靜態工廠
<!--靜態工廠 -->
<bean id="userDaoId2" class="com.qf.factory.StaticFactory"factorymethod="createUserDao"></bean>
<!-- 例項工廠:先建立工廠例項,建立物件 -->
1)<!-- 工廠物件 -->
<bean id="userDaoFactory" class="com.qianfeng.factory.UserDaoFactory"></bean>
2)<bean id="userDao3" factory-bean="userDaoFactory" factory-method="createUserDaoImpl"></bean>
9.作用域:用於確定spring建立bean例項個數是否是同一個 <bean>標籤屬性 scope
scope="singleton":單例
scope="prototype":多列
預設是單列
10.屬性的自動依賴注入-autowire
autowire:屬性依賴自動注入
1)autowire="byName":通過名稱來注入,通過類中需要注入實現的物件的名稱與主配置檔案中的bean 的id名稱進行匹配,匹配上就注入
//以userDao去匹配 id的值,匹配上則找到.
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl" autowire="byName">
<!-- <property name="userDao" ref="userDaoId3"></property> -->
</bean>
<bean id="userDao" class="com.qf.dao.impl.UserDaoImpl"></bean>
2)autowire="byType":通過型別來注入,注意點:型別必須唯一(不然報錯,因此只寫一種建立bean).
3)與class的對映檔案有關:知道找的是哪一個型別。//通過型別類匹配,匹配出來的是多個類.
<bean autowire="byType">
11.基於註解方式實現bean
1)dist---xsd.config--申明配置--The context schema
2)xml檔案中:只寫這個配置.<!-- 掃描所有添加了註解的類 -->
<context:component-scan base-package="com.qf">
3)類中:
/*@Component(value="userBiz")*/ //也可以這樣寫元件的註解
@Service(value="userBiz") //分層的註解
@Scope(value="singleton")
public class UserBizImpl implements IUserBiz {
@Resource(name="userName") //這裡的userName對應的是UserDaoImpl中對應的userName
private IUserDao userDao;
/*@Autowired --預設是以byType的方式屬性自動注入
private IUserDao userDao1;*/
}
@Component(value="userName")public class UserDaoImpl implements IUserDao{}