




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
延遲符Spring簡(jiǎn)介Spring入門(mén)與IoCSpring簡(jiǎn)介延遲符什么是SpringSpring框架的優(yōu)點(diǎn)Spring的體系結(jié)構(gòu)什么是SpringSpring是分層的JavaSE/EEfull-stack輕量級(jí)開(kāi)源框架,以IoC(InverseofControl控制反轉(zhuǎn))和AOP(AspectOrientedProgramming面向切面編程)為內(nèi)核,使用基本的JavaBean來(lái)完成以前只可能由EJB完成的工作,取代了EJB的臃腫、低效的開(kāi)發(fā)模式。什么是Spring
在實(shí)際開(kāi)發(fā)中,通常服務(wù)器端在采用三層體系架構(gòu),分別為表示層(Web)、業(yè)務(wù)邏輯層(Service)、持久層(Dao),Spring對(duì)每一層都提供了技術(shù)支持。表示層業(yè)務(wù)邏輯層持久層在表示層提供了與SpringMVC等框架的整合在業(yè)務(wù)邏輯層可以管理事務(wù)、記錄日志等在持久層可以整合MyBtais、JdbcTemplate等技術(shù)Spring框架的優(yōu)點(diǎn)
Spring具有簡(jiǎn)單、可測(cè)試和松耦合等特點(diǎn)。Spring不僅可以用于服務(wù)器端開(kāi)發(fā),也可以應(yīng)用于任何Java應(yīng)用的開(kāi)發(fā)中。非侵入式設(shè)計(jì)支持AOP方便解耦、簡(jiǎn)化開(kāi)發(fā)12
3支持聲明式事務(wù)處理4方便程序測(cè)試5方便集成各種優(yōu)秀框架6降低JavaEEAPI的使用難度7Spring框架的7大優(yōu)點(diǎn)Spring的體系結(jié)構(gòu)Spring框架采用的是分層架構(gòu),它一系列的功能要素被分成20個(gè)模塊。Spring的體系結(jié)構(gòu)1.CoreContainer(核心容器)BeansCoreContextSpELCoreContainer
提供了BeanFactory,Spring將管理對(duì)象稱為Bean。
提供了Spring框架的基本組成部分,包括IoC和DI功能。建立在Core和Beans模塊的基礎(chǔ)之上,它是訪問(wèn)定義和配置的任何對(duì)象的媒介。
Spring3.0后新增的模塊,是運(yùn)行時(shí)查詢和操作對(duì)象圖的強(qiáng)大的表達(dá)式語(yǔ)言。Spring的體系結(jié)構(gòu)JDBCORMOXMJMSDataAccess/IntegrationTransactions提供了一個(gè)JDBC的抽象層,大幅度的減少了在開(kāi)發(fā)過(guò)程中對(duì)數(shù)據(jù)庫(kù)操作的編碼。
提供了一個(gè)支持對(duì)象/XML映射的抽象層實(shí)現(xiàn),如JAXB、Castor、XMLBeans、JiBX和XStream。對(duì)流行的對(duì)象關(guān)系映射API,包括JPA、JDO和Hibernate提供了集成層支持。
支持對(duì)實(shí)現(xiàn)特殊接口以及所有POJO類(lèi)的編程和聲明式的事務(wù)管理。指Java消息傳遞服務(wù),包含使用和產(chǎn)生信息的特性,自4.1版本后支持與Spring-message模塊的集成。2.DataAccess/Integration(數(shù)據(jù)訪問(wèn)/集成)Spring的體系結(jié)構(gòu)3.WebWebSocketServletWebPortletWebSpring4.0以后新增的模塊,它提供了WebSocket和SockJS的實(shí)現(xiàn),以及對(duì)STOMP的支持。提供了基本的Web開(kāi)發(fā)集成特性,如:多文件上傳、使用Servlet監(jiān)聽(tīng)器來(lái)初始化IoC容器以及Web應(yīng)用上下文。也稱Spring-webmvc模塊,包含Spring模型—視圖—控制器(MVC)和RESTWebServices實(shí)現(xiàn)的Web程序提供了在portlet環(huán)境中使用MVC實(shí)現(xiàn),類(lèi)似Servlet模塊的功能。Spring的體系結(jié)構(gòu)4.其他模塊AOPAspectsInstrumentationMessagingTest
提供了面向切面編程實(shí)現(xiàn),允許定義方法攔截器和切入點(diǎn),將代碼按照功能進(jìn)行分離,以降低耦合性。提供了類(lèi)工具的支持和類(lèi)加載器的實(shí)現(xiàn),可以在特定的應(yīng)用服務(wù)器中使用。提供了與AspectJ的集成功能,AspectJ是一個(gè)功能強(qiáng)大且成熟的面向切面編程(AOP)框架。
提供了對(duì)單元測(cè)試和集成測(cè)試的支持。Spring4.0以后新增的模塊,它提供了對(duì)消息傳遞體系結(jié)構(gòu)和協(xié)議的支持。謝謝觀看主講人:蔣衛(wèi)祥延遲符任務(wù)4.1搭建Spring開(kāi)發(fā)環(huán)境Spring入門(mén)與IoC搭建Spring開(kāi)發(fā)環(huán)境延遲符Spring與MyBatis框架整合搭建Spring開(kāi)發(fā)環(huán)境主要任務(wù):應(yīng)用IDEA工具搭建Spring開(kāi)發(fā)環(huán)境搭建Spring開(kāi)發(fā)環(huán)境應(yīng)用IDEA工具搭建Spring開(kāi)發(fā)環(huán)境1.創(chuàng)建一個(gè)Java項(xiàng)目搭建Spring開(kāi)發(fā)環(huán)境
2.編寫(xiě)執(zhí)行Spring的執(zhí)行程序(1)編寫(xiě)一個(gè)簡(jiǎn)單的JavaBean,Hello.java應(yīng)用IDEA工具搭建Spring開(kāi)發(fā)環(huán)境
packagecn.js.ccit;publicclassHello{privateStringuserName;//用戶名publicHello(){}//set/getName()方法publicStringgetUserName(){returnuserName;}
publicvoidsetUserName(StringuserName){this.userName=userName;}}搭建Spring開(kāi)發(fā)環(huán)境
2.編寫(xiě)執(zhí)行Spring的執(zhí)行程序(2)修改Spring配置文件:spring-config.xml應(yīng)用IDEA工具搭建Spring開(kāi)發(fā)環(huán)境<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
<beanid="hello"
class="cn.js.ccit.Hello"><propertyname="userName">
<value>Jack</value></property></bean></beans>搭建Spring開(kāi)發(fā)環(huán)境
2.編寫(xiě)執(zhí)行Spring的執(zhí)行程序(3)編寫(xiě)測(cè)試程序:SpringTest.java應(yīng)用IDEA工具搭建Spring開(kāi)發(fā)環(huán)境publicclassSpringTest{publicstaticvoidmain(String[]args){Resourcers=newClassPathResource("spring-config.xml");BeanFactorybean=newXmlBeanFactory(rs);Hellohello=(Hello)bean.getBean("hello");System.out.println("Hello"+hello.getUserName()+"!");}}搭建Spring開(kāi)發(fā)環(huán)境
Spring與MyBatis框架整合1.創(chuàng)建Web項(xiàng)目搭建Spring開(kāi)發(fā)環(huán)境
2.添加Spring特性,修改web.xml<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class></listener><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value></context-param>
Spring與MyBatis框架整合搭建Spring開(kāi)發(fā)環(huán)境
3.在pom.xml中添加該項(xiàng)目所需要依賴jar包
<!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.14.RELEASE<ersion></dependency><!--MyBatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.8<ersion></dependency>
Spring與MyBatis框架整合
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6<ersion></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28<ersion></dependency>實(shí)體類(lèi)Mapper接口與映射Servcie層控制層Spring配置文件延遲符用戶注冊(cè)模塊—設(shè)計(jì)步驟視圖層JSP搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(1)實(shí)體類(lèi):UserInfo.java@DatapublicclassUserInfo{privateintid;//用戶IDprivateStringuserName;//用戶名privateStringpassword;//密碼privateStringaddress;//地址}
Spring與MyBatis框架整合搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(2)
Mapper接口與映射@MapperpublicinterfaceUserInfoMapper{//保存用戶publicbooleaninsertUserInfo(UserInfouserInfo);//根據(jù)用戶名與密碼判斷用戶是否存在publicBooleanisExistFileInfo(StringuserName,Stringpassword);}
Spring與MyBatis框架整合<!--新增用戶信息--><insertid="insertUserInfo"
parameterType="cn.js.ccit.pojo.UserInfo">insertinto
tb_userinfo(user_name,password,address)values(#{userName},#{password},#{address})</insert><!--根據(jù)用戶名與密碼判斷用戶是否存在--><selectid="isExistFileInfo"parameterType="string"
resultType="java.lang.Boolean">
select*fromtb_userinfowhere
user_name=#{param1}andpassword=#{param2}</select>搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(3)Service層publicinterfaceIUserInfoService{
//保存用戶
publicbooleaninsertUserInfo(UserInfouserInfo);
//根據(jù)用戶名與密碼查詢用戶是否存在
publicBooleanisExistFileInfo(StringuserName,Stringpassword);}
Spring與MyBatis框架整合@DatapublicclassUserInfoServiceimplementsIUserInfoService{
@AutowiredprivateUserInfoMapperuserInfoMapper;
//保存用戶publicbooleaninsertUserInfo(UserInfouserInfo){returnuserInfoMapper.insertUserInfo(userInfo);}
//根據(jù)用戶名與密碼查詢用戶是否存在publicBooleanisExistFileInfo(StringuserName,Stringpassword){returnuserInfoMapper.isExistFileInfo(userName,password);}}搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(4)
控制層……//獲取輸入的用戶信息StringuserName=req.getParameter("userName");Stringpassword=req.getParameter("password");Stringaddress=req.getParameter("address");//獲取容器對(duì)象ServletContextsc=this.getServletContext();//通過(guò)上下文獲取Spring容器對(duì)象WebApplicationContextwac=WebApplicationContextUtils.getWebApplicationContext(sc);//在Spring容器中獲取userInfoService對(duì)象IUserInfoServiceuserInfoService=
wac.getBean("userInfoService",UserInfoService.class);
Spring與MyBatis框架整合
//查詢用戶是否存在Objectobj=userInfoService.isExistFileInfo(userName,password);if(obj==null){//用戶不存在UserInfouserInfo=newUserInfo();……//設(shè)置用戶信息
userInfoService.insertUserInfo(userInfo);//保存用戶信息session.setAttribute("userName",userName);//用戶名保存到會(huì)話對(duì)象中result="success.jsp";}else{result="error.jsp";}res.sendRedirect(result);}
……}搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(5)Spring配置文件<!--配置數(shù)據(jù)源--><beanid="dataSource"class="mons.dbcp2.BasicDataSource"><propertyname="driverClassName"value="${db.driver}"/><propertyname="url"value="${db.url}"/><propertyname="username"value="${db.username}"/><propertyname="password"value="${db.password}"/><propertyname="maxIdle"value="5"/></bean>
<!--配置sqlSessionFactory--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!--指定Mybatis全局配置文件--><propertyname="configLocation"
value="classpath:SqlMapConfig.xml"/><!--指定數(shù)據(jù)源--><propertyname="dataSource"ref="dataSource"/></bean>
Spring與MyBatis框架整合<!--配置Mapper接口的掃描--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"
value="cn.js.ccit.mapper"/></bean>
<!--配置userInfoService--><beanid="userInfoService"class="cn.js.ccit.service.UserInfoService"><propertyname="userInfoMapper"
ref="userInfoMapper"/></bean>搭建Spring開(kāi)發(fā)環(huán)境
4.編寫(xiě)用戶注冊(cè)代碼(6)
視圖層
Spring與MyBatis框架整合謝謝觀看主講人:蔣衛(wèi)祥延遲符依賴注入的3種形式Spring入門(mén)與IoC依賴注入延遲符
DI的全稱是DependencyInjection,中文稱之為依賴注入。它與控制反轉(zhuǎn)(IoC)的含義相同,只不過(guò)這兩個(gè)稱呼是從兩個(gè)角度描述的同一個(gè)概念。
在使用Spring框架之后,對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是由Spring容器來(lái)創(chuàng)建,Spring容器會(huì)負(fù)責(zé)控制程序之間的關(guān)系,而不是由調(diào)用者的程序代碼直接控制。這樣,控制權(quán)由應(yīng)用代碼轉(zhuǎn)移到了Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn),這就是控制反轉(zhuǎn)。從Spring容器的角度來(lái)看,Spring容器負(fù)責(zé)將被依賴對(duì)象賦值給調(diào)用者的成員變量,這相當(dāng)于為調(diào)用者注入了它依賴的實(shí)例,這就是Spring的依賴注入。IoCDI依賴注入實(shí)現(xiàn)方式構(gòu)造方法注入屬性setter方法注入依賴注入常用的實(shí)現(xiàn)方式:接口注入接口注入接口注入:指將客戶類(lèi)所有注入的方法抽取到一個(gè)接口中,客戶類(lèi)通過(guò)實(shí)現(xiàn)這一接口提供注入的方法。為了采取接口注入的方式,需要聲明一個(gè)額外的接口。接口注入接口方法注入實(shí)例接口:IService.javapublicinterfaceIService{ publicvoidgo();}(2)接口實(shí)現(xiàn)類(lèi):Service.javapublicclassServiceimplementsIService{publicvoidgo(){ System.out.println("接口注入測(cè)試!");}}(3)注入接口:Injectable.javapublicinterfaceInjectable{ voidinjectService(IServiceservice);}接口注入接口方法注入實(shí)例(4)Consumer類(lèi)通過(guò)繼承Injectable接口注入。publicclassConsumerimplementsInjectable{
privateIServiceservice=null;
publicvoiddoSomething(){
service.go();
} publicvoidinjectService(IServiceservice){ this.service=service; } publicstaticvoidmain(String[]args){ IServiceservice=newService(); Consumerconsumer=newConsumer(); consumer.injectService(service);//接口注入 consumer.doSomething(); } }屬性setter方法注入屬性setter方法注入:指loC
容器使用setter方法注入被依賴的實(shí)例。通過(guò)調(diào)用無(wú)參構(gòu)造器或無(wú)參靜態(tài)工廠方法實(shí)例化Bean后,調(diào)用該Bean的setter方法,即可實(shí)現(xiàn)基于setter方法的依賴注入。使用屬性setter方法實(shí)現(xiàn)依賴注入
在cn.js.ccit.ioc包中,創(chuàng)建接口UserService,在接口中編寫(xiě)一個(gè)say()方法。1packagecn.js.ccit.ioc;publicinterfaceUserService{ publicvoidsay();}使用屬性setter方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建UserService接口的實(shí)現(xiàn)類(lèi)UserServiceImpl,在類(lèi)中聲明userDao屬性,并添加屬性的setter方法。2packagecn.js.ccit.ioc;publicclassUserServiceImplimplementsUserService{privateUserDao
userDao;//屬性setter方法注入publicvoidsetUserDao(UserDao
userDao){this.userDao=userDao;}publicUserDaogetUserDao(){returnuserDao;}publicvoidsay(){userDao.say();System.out.println("UserServicesayhelloWorld!");}}使用屬性setter方法實(shí)現(xiàn)依賴注入在配置文件applicationContext.xml中,創(chuàng)建一個(gè)id為userService的Bean,該Bean用于實(shí)例化UserServiceImpl類(lèi)的信息,并將userDao的實(shí)例注入到userService中。3<beanid="userDao"class="cn.js.ccit.ioc.UserDaoImpl"/><beanid="userService"class="cn.js.ccit.ioc.UserServiceImpl"><propertyname="userDao"ref="userDao"></property></bean><property>是<bean>元素的子元素,它用于調(diào)用Bean實(shí)例中的setUserDao()方法完成屬性賦值,從而實(shí)現(xiàn)依賴注入。其name屬性表示Bean實(shí)例中的相應(yīng)屬性名,ref屬性用于指定其屬性值。使用屬性setter方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建測(cè)試類(lèi)TestDI,來(lái)對(duì)程序進(jìn)行測(cè)試。4packagecn.js.ccit.ioc;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassTestDI{publicstaticvoidmain(String[]args){//1.初始化spring容器,加載配置文件
ApplicationContext
applicationContext=newClassPathXmlApplicationContext("applicationContext.xml");
//2.通過(guò)容器獲取UserService實(shí)例
UserService
userService= (UserService)applicationContext.getBean("userService");
//3.調(diào)用實(shí)例中的say()方法
userService.say();}}使用屬性setter方法實(shí)現(xiàn)依賴注入執(zhí)行程序后,控制臺(tái)的輸出結(jié)果如圖所示。5構(gòu)造方法注入構(gòu)造方法注入:指loC容器使用構(gòu)造方法注入被依賴的實(shí)例?;跇?gòu)造方法的依賴注入通過(guò)調(diào)用帶參數(shù)的構(gòu)造方法來(lái)實(shí)現(xiàn),每個(gè)參數(shù)代表著一個(gè)依賴。使用構(gòu)造方法實(shí)現(xiàn)依賴注入
在cn.js.ccit.ioc包中,創(chuàng)建接口UserService,在接口中編寫(xiě)一個(gè)say()方法。1packagecn.js.ccit.ioc;publicinterfaceUserService{ publicvoidsay();}使用構(gòu)造方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建UserService接口的實(shí)現(xiàn)類(lèi)UserServiceImpl,在類(lèi)中聲明userDao屬性,并實(shí)現(xiàn)含userDao參數(shù)的構(gòu)造方法。2packagecn.js.ccit.ioc;publicclassUserServiceImplimplementsUserService{privateUserDaouserDao;//構(gòu)造方法注入publicUserServiceImpl(UserDaouserDao){ this.userDao=userDao;}@Overridepublicvoidsay(){userDao.say();System.out.println("UserServicesayhelloWorld!");}}使用構(gòu)造方法實(shí)現(xiàn)依賴注入在配置文件applicationContext.xml中,創(chuàng)建一個(gè)id為userService的Bean,該Bean用于實(shí)例化UserServiceImpl類(lèi)的信息,并將userDao的實(shí)例注入到userService中。3<beanid="userDao"class="cn.js.ccit.ioc.UserDaoImpl"/><beanid="userService"class="cn.js.ccit.ioc.UserServiceImpl">
<!--構(gòu)造函數(shù)方式注入的時(shí)候必須配置構(gòu)造函數(shù)的參數(shù)--> <constructor-argname="userDao"ref="userDao"></constructor-arg></bean><constructor-arg>是<bean>元素的子元素,通過(guò)傳入構(gòu)造參數(shù)進(jìn)行實(shí)例化。其name屬性表示構(gòu)造參數(shù)名稱,ref屬性用于指定其參數(shù)值。使用構(gòu)造方法實(shí)現(xiàn)依賴注入在cn.js.ccit.ioc包中,創(chuàng)建測(cè)試類(lèi)TestDI,來(lái)對(duì)程序進(jìn)行測(cè)試。4packagecn.js.ccit.ioc;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassTestDI{publicstaticvoidmain(String[]args){//1.初始化spring容器,加載配置文件ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");
//2.通過(guò)容器獲取UserService實(shí)例UserServiceuserService= (UserService)applicationContext.getBean("userService");
//3.調(diào)用實(shí)例中的say()方法userService.say();}}使用構(gòu)造方法實(shí)現(xiàn)依賴注入執(zhí)行程序后,控制臺(tái)的輸出結(jié)果如圖所示。5使用構(gòu)造方法實(shí)現(xiàn)依賴注入(1)index屬性在參數(shù)的順序指定中,第一個(gè)參數(shù)的索引值是0,第二個(gè)參數(shù)的索引是1,依次類(lèi)推。applicationContext.xml可以改寫(xiě)為:<beanid="user"class="com.my.ccit.User">
<constructor-argindex="0">
<value>admin</value>
</constructor-arg>
<constructor-argindex="1">
<value>123456</value>
</constructor-arg></bean>(2)type類(lèi)型Spring會(huì)自動(dòng)解析參數(shù)的數(shù)據(jù)類(lèi)型,根據(jù)“type”屬性來(lái)明確使用那個(gè)類(lèi)型。當(dāng)構(gòu)造方法中帶多個(gè)參數(shù)時(shí),采用type或者index來(lái)指定構(gòu)造方法的參數(shù)的類(lèi)型和順序。謝謝觀看主講人:蔣衛(wèi)祥延遲符BeanFactory與ApplicationContextSpring入門(mén)與IoCBeanFactory與ApplicationContext延遲符什么是BeanFactory?BeanFactory是Factory模式的一個(gè)實(shí)現(xiàn),是用來(lái)實(shí)例化配置和管理眾多bean的容器,也被稱為“Spring上下文”,bean和bean之間的依賴關(guān)系,也由BeanFactory負(fù)責(zé)維護(hù);BeanFactory將應(yīng)用所需要的所有業(yè)務(wù)交給BeanFactory之后,直接從BeanFactory取得最終組裝完成并且可用的對(duì)象;一個(gè)BeanFactory用接口BeanFactory表示,這個(gè)接口最簡(jiǎn)單的BeanFactory實(shí)現(xiàn)是XmlBeanFactory。BeanFactory與ApplicationContext實(shí)例化BeanFactory方法
InputStreamis=newFileInputStream("beans.xml");
XmlBeanFactoryfactory=newXmlBeanFactory(is);
或者
ClassPathResourceres=newClassPathResource("beans.xml");
XmlBeanFactoryfactory=newXmlBeanFactory(res);BeanFactory與ApplicationContext
BeanFactory提供的方法booleancontainsBean(String):如果BeanFactory包含給定名稱的bean定義(或bean實(shí)例),則返回true;ObjectgetBean(String):返回以給定名字注冊(cè)的bean實(shí)例;ObjectgetBean(String,Class):返回以給定名稱注冊(cè)的bean實(shí)例,并轉(zhuǎn)換為給定class類(lèi)型的實(shí)例,如果轉(zhuǎn)換失敗,相應(yīng)的異常(BeanNotOfRequiredTypeException)將被拋出;ClassgetType(Stringname):返回給定名稱的bean的Class。如果沒(méi)有找到指定的bean實(shí)例,則拋出NoSuchBeanDefinitionException異常;booleanisSingleton(String):判斷給定名稱的bean定義(或bean實(shí)例)是否為singleton模式,如果bean沒(méi)找到,則拋出NoSuchBeanDefinitionException異常;String[]getAliases(String):返回給定bean名稱的所有別名。BeanFactory與ApplicationContextApplicationContext簡(jiǎn)介ApplicationContext提供了一些特色及高級(jí)的功能,不僅提供BeanFactory所有的功能,包括:提供了取得資源文件(ResourceFile)更方便的方法提供了文字消息解析的方法支持國(guó)際化消息BeanFactory與ApplicationContextApplicationContext實(shí)現(xiàn)利用ClassPathXmlApplicationContext加載配置文件實(shí)例化applicationContextApplicationContextac=newClassPathXmlApplicationContext("/WEB-INF/applicationContext.xml");或者String[]locations={"bean1.xml","bean2.xml","bean3.xml"};
ApplicationContextac=newClassPathXmlApplicationContext(locations);
Aclassacalss=(A)ac.getBean("aclass");利用FileSystemXmlApplicationContext加載配置文件實(shí)例化applicationContextApplicationContextctx=newFileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");或者String[]locations={"bean1.xml","bean2.xml","bean3.xml"};
ApplicationContextctx=newFileSystemXmlApplicationContext(locations);AClassaclass=(A)ctx.getBean("aclass");謝謝觀看主講人:蔣衛(wèi)祥延遲符Bean的scopeSpring入門(mén)與IoCBean的作用域延遲符
Spring4.3中為Bean的實(shí)例定義了7種作用域,如下表所示:
注意:在上表7種作用域中,singleton和prototype是最常用的兩種作用域。Bean的作用域
在Spring配置文件中,可以使用<bean>元素的scope屬性,將Bean的作用域定義成singleton。例如:<beanid="scope"class="cn.js.ccit.scope.Scope"scope="singleton"/>
在Spring中如何配置singleton作用域?
singleton是Spring容器默認(rèn)的作用域,當(dāng)Bean的作用域?yàn)閟ingleton時(shí),Spring容器就只會(huì)存在一個(gè)共享的Bean實(shí)例。singleton作用域?qū)τ跓o(wú)會(huì)話狀態(tài)的Bean(如Dao組件、Service組件)來(lái)說(shuō),是最理想的選擇。Bean的作用域在Spring配置文件中,同樣使用<bean>元素的scope屬性,將Bean的作用域定義成prototype。對(duì)需要保持會(huì)話狀態(tài)的Bean(如Struts2的Action類(lèi))應(yīng)該使用prototype作用域。在使用prototype作用域時(shí),Spring容器會(huì)為每個(gè)對(duì)該Bean的請(qǐng)求都創(chuàng)建一個(gè)新的實(shí)例。
在Spring中如何配置prototype作用域?謝謝觀看主講人:蔣衛(wèi)祥延遲符Bean的生命周期Spring入門(mén)與IoCBean的生命周期延遲符什么是Bean的生命周期?
SpringBean的生命周期指的是Bean從創(chuàng)建到初始化再到銷(xiāo)毀的過(guò)程,這個(gè)過(guò)程由IoC容器管理。
BeanFactory首先通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)Bean實(shí)例,之后它會(huì)執(zhí)行Bean實(shí)例的一系列之前初始化動(dòng)作,初始化結(jié)束B(niǎo)ean將進(jìn)入準(zhǔn)備就緒(ready)狀態(tài),這時(shí)應(yīng)用程序就可以獲取這些Bean實(shí)例了。最后,當(dāng)你銷(xiāo)毀單例(Singleton)Bean時(shí),它會(huì)調(diào)用相應(yīng)的銷(xiāo)毀方法,結(jié)束B(niǎo)ean實(shí)例的生命周期。Bean的生命周期延遲符實(shí)例化:第1步,實(shí)例化一個(gè)bean對(duì)象;屬性賦值:第2步,為bean設(shè)置相關(guān)屬性和依賴;初始化:第3~7步,步驟較多,其中第5、6步為初始化操作,第3、4步為在初始化前執(zhí)行,第7步在初始化后執(zhí)行,該階段結(jié)束,才能被用戶使用;銷(xiāo)毀:第8~10步,第8步不是真正意義上的銷(xiāo)毀(還沒(méi)使用呢),而是先在使用前注冊(cè)了銷(xiāo)毀的相關(guān)調(diào)用接口,為了后面第9、10步真正銷(xiāo)毀bean時(shí)再執(zhí)行相應(yīng)的方法。Bean的生命周期延遲符<bean id="beanId"(1) name="beanName"(2) class="beanClass"(3) parent="parentBean"(4) abstract="true|false"(5) singleton="true|false"(6) lazy-init="true|false|default"(7) autowire="no|byName|byType|constructor|autodetect|default"(8) dependency-check="none|objects|simple|all|default"(9) depends-on="dependsOnBean"(10) init-method="method"(11) destroy-method="method"(12) factory-method="method"(13) factory-bean="bean">(14)</bean>1.Bean的定義Bean的生命周期延遲符id:Bean的唯一標(biāo)識(shí)名。它必須是合法的XMLID,在整個(gè)XML文檔中唯一。name:用來(lái)為id創(chuàng)建一個(gè)或多個(gè)別名。它可以是任意的字母組成。多個(gè)別名之間用逗號(hào)或空格分開(kāi)。class:用來(lái)定義類(lèi)的全限定名(包名+類(lèi)名)。只有子類(lèi)Bean不用定義該屬性。parent:子類(lèi)Bean定義它所引用它的父類(lèi)Bean。這時(shí)前面的class屬性失效。子類(lèi)Bean會(huì)繼承父類(lèi)Bean的所有屬性,子類(lèi)Bean也可以覆蓋父類(lèi)Bean的屬性。注意:子類(lèi)Bean和父類(lèi)Bean是同一個(gè)Java類(lèi)。abstract(默認(rèn)為“false”):用來(lái)定義Bean是否為抽象Bean。它表示這個(gè)Bean將不會(huì)被實(shí)例化,一般用于父類(lèi)Bean,因?yàn)楦割?lèi)Bean主要是供子類(lèi)Bean繼承使用。singleton(默認(rèn)為“true”):定義Bean是否是Singleton(單例)。如果設(shè)為“true”,則在BeanFactory作用范圍內(nèi),只維護(hù)此Bean的一個(gè)實(shí)例。如果設(shè)為“flase”,Bean將是Prototype(原型)狀態(tài),BeanFactory將為每次Bean請(qǐng)求創(chuàng)建一個(gè)新的Bean實(shí)例。Bean的定義Bean的生命周期延遲符lazy-init(默認(rèn)為“default”):用來(lái)定義這個(gè)Bean是否實(shí)現(xiàn)懶初始化。autowire(自動(dòng)裝配,默認(rèn)為“default”):它定義了Bean的自動(dòng)裝載方式。dependency-check(依賴檢查,默認(rèn)為“default”):它用來(lái)確保Bean組件通過(guò)JavaBean描述的所以依賴關(guān)系都得到滿足。在與自動(dòng)裝配功能一起使用時(shí),它特別有用。depends-on(依賴對(duì)象):這個(gè)Bean在初始化時(shí)依賴的對(duì)象,這個(gè)對(duì)象會(huì)在這個(gè)Bean初始化之前創(chuàng)建。init-method:用來(lái)定義Bean的初始化方法,它會(huì)在Bean組裝之后調(diào)用。destroy-method:用來(lái)定義Bean的銷(xiāo)毀方法,它在BeanFactory關(guān)閉時(shí)調(diào)用。factory-method:定義創(chuàng)建該Bean對(duì)象的工廠方法。它用于下面的“factory-bean”,表示這個(gè)Bean是通過(guò)工廠方法創(chuàng)建。此時(shí),“class”屬性失效。factory-bean:定義創(chuàng)建該Bean對(duì)象的工廠類(lèi)。如果使用了“factory-bean”則“class”屬性失效。Bean的定義Bean的生命周期延遲符依賴的值設(shè)置與引用<beanid="helloBean2"class="com.my.ccit.HelloBean"> <constructor-arg><value><null/></value></constructor-arg> <propertyname="date"><null/></property></bean>構(gòu)造參數(shù)設(shè)置成null<beanid="helloBean2"class="com.my.ccit.HelloBean"> <constructor-argvalue="大家好"></constructor-arg> <propertyname="name"value="XXX"></property></bean>在property中設(shè)置屬性值Bean的生命周期延遲符依賴的值設(shè)置與引用<beanid="helloBean"class="XXX"> <constructor-arg><refbean="date"/></constructor-arg> <propertyname="other"><refbean="otherBean"/></property></bean>或者<beanid="helloBean"class="XXX"/>
<constructor-argref="date"/>
<propertyname="other"ref="otherBean"/></bean>如果Bean定義文件中已經(jīng)有一個(gè)定義的Bean實(shí)例,則可以讓某個(gè)屬性引用這個(gè)實(shí)例Bean的生命周期延遲符依賴的值設(shè)置與引用<beanid="helloBean"> <propertyname="other"><reflocal="otherBean"/></property></bean>使用<ref>參考其他Bean實(shí)例時(shí),所定義的Bean必須是同一個(gè)設(shè)置文件中,且指定“l(fā)ocal”屬性<beanid="helloBean"class="XXX"> <propertyname="helloWorld"value="hello"></property> <propertyname="date"><beanclass="java.util.Date"></property></bean>如果某個(gè)Bean實(shí)例只被某個(gè)屬性參考過(guò)一次,可以直接指定其“class”屬性即可Bean的生命周期延遲符依賴的值設(shè)置與引用<beanid="beanOne"class="XXX"depends-on="beanTwo,beanThree"/><beanid="beanTwo"class="XXX"/><beanid="beanThree"class="XXX">如果某個(gè)Bean在生成之前要求另一個(gè)Bean必須先實(shí)例化,則可以指定“depends-on”屬性來(lái)設(shè)置Bean的生命周期延遲符自動(dòng)綁定byName:試圖在容器中尋找和需要自動(dòng)裝配的屬性名相同的Bean(或ID)。如果沒(méi)有找到相符的Bean,這個(gè)屬性就沒(méi)有被裝配上。byType:試圖在容器上尋找一個(gè)與需要自動(dòng)配置的屬性類(lèi)型相同的Bean。如果沒(méi)有找到相符的Bean,這個(gè)屬性就沒(méi)有被裝配。constructor:試圖在容器中查找與需要自動(dòng)裝配的Bean的構(gòu)造方法參數(shù)一致的一個(gè)或多個(gè)Bean。如果存在不確定的Bean或構(gòu)造方法,容器或拋出異常。autodetect:首先嘗試使用contrauctor來(lái)自動(dòng)裝配,然后使用byType方式。謝謝觀看主講人:蔣衛(wèi)祥延遲符任務(wù)4.2文件夾管理Spring入門(mén)與IoC文件夾管理設(shè)計(jì)步驟3.Service層4.控制層5.Spring配置文件2.Mapper映射文件:FolderMapper.xml1.Mapper接口:FolderMapper.java延遲符文件夾管理延遲符1.Mapper接口:FolderMapper.java@MapperpublicinterfaceFolderMapper{//保存文件夾信息publicbooleansaveFolder(Folderfolder);;
//根據(jù)文件名稱查詢文件夾publicList<Folder>selectFolderByName(StringfolderName);}文件夾管理延遲符2.Mapper映射文件:FolderMapper.xml<mappernamespace="cn.js.ccit.mapper.FolderMapper"><!--新增文件夾信息--><insertid="saveFolder"parameterType="cn.js.ccit.pojo.Folder">insertintotb_folder(folderName,folderPath,creator,folderDate,folderDelete)values(#{folderName},#{folderPath},#{creator},#{folderDate},#{folderDelete})</insert><!--根據(jù)文件名稱查詢文件夾--><selectid="selectFolderByName"parameterType="string"resultType="folder">select*fromtb_folderwherefolderName=#{folderName}</select></mapper>文件夾管理延遲符3.Service層:新增文件夾Service接口
publicinterfaceIFileInfoService{//保存文檔信息publicbooleaninsertFileInfo(FileInfofileInfo);
//文檔是否存在publicbooleanisExistFileInfo(StringfilePath,StringfileName);
//根據(jù)文檔名或創(chuàng)建者查詢文檔publicList<FileInfo>searchFileInfoByName(StringfileName,Stringcreator);}文件夾管理延遲符3.Service層:新增文件夾Service接口實(shí)現(xiàn)類(lèi)@DatapublicclassFolderServiceimplementsIFolderService{@AutowiredprivateFolderMapperfolderMapper;
//保存文件夾信息publicbooleansaveFolder(Folderfolder){returnfolderMapper.saveFolder(folder);}
//創(chuàng)建文件夾publicbooleancreateFolder(StringfolderPath,StringfolderName){booleanresult=false;Filefile=newFile(folderPath,folderName);if(file.exists()){result=false;}else{file.mkdir();result=true;}returnresult;}
//文件夾是否存在publicbooleanisExistFolder(StringfolderName){booleanresult=false;List<Folder>list=folderMapper.selectFolderByName(folderName);if(list.size()>0){result=true;}returnresult;}}文件夾管理延遲符4.控制層ServletContextsc=this.getServletContext();//通過(guò)上下文對(duì)象獲取Spring容器對(duì)象WebApplicationContextwac=WebApplicationContextUtils.getWebApplicationContext(sc);IFolderServicefolderService=
wac.getBean("folderService",FolderService.class);//判斷文件夾是否存在booleanisExistFolder=
folderService.isExistFolder(folderName);if(isExistFolder){//文件夾已經(jīng)存在result=false;}else{folderService.createFolder(folderPath,folderName);
//創(chuàng)建文件夾Folderfolder=newFolder();…..//設(shè)置文件夾信息
//將文件夾信息保存到數(shù)據(jù)表中booleaninsertResult=folderService.saveFolder(folder);if(insertResult){//保存成功result=true;}else{//保存失敗result=false;}}if(result){out.println("恭喜您,文件夾信息保存成功!");}else{out.println("文件夾信息已經(jīng)存在或保存失??!");}}文件夾管理延遲符5.Spring配置文件<!--配置數(shù)據(jù)源-->…..
<!--配置sqlSessionFactory-->……<!—配置Mapper接口--><beanid="folderMapper"class="org.mybatis.spring.mapper.MapperFactoryBean"><!--指定要映射的mapper接口的全限定名--><propertyname="mapperInterface"value="cn.js.ccit.mapper.FolderMapper"/><!--指定sqlSessionFactory--><propertyname="sqlSessionFactory"ref="sqlSessionFactory"/></bean><!—foldService依賴folderMapper--><beanid="folderService"class="cn.js.ccit.service.Fo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- TCSI 0045-2025 居家物理環(huán)境適老化改造規(guī)范
- 平?jīng)鏊原h(huán)氧地坪施工方案
- 初中記敘文的結(jié)尾寫(xiě)法
- 建筑工程勞務(wù)施工合同范本
- 食用油罐外壁防腐施工方案
- 裝配式商超貨架施工方案
- 濱州期末數(shù)學(xué)試卷
- 沖擊鉆機(jī)施工方案
- 智研咨詢發(fā)布:中國(guó)干細(xì)胞治療行業(yè)發(fā)展現(xiàn)狀、產(chǎn)業(yè)全景概覽及投資方向分析報(bào)告
- 科技創(chuàng)新在高質(zhì)量共建一帶一路中的作用
- 2025年內(nèi)蒙古興安盟突泉縣選聘生態(tài)護(hù)林員450人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 胸腔閉式引流護(hù)理
- 2025年興湘集團(tuán)全資子公司招聘筆試參考題庫(kù)含答案解析
- 蒙醫(yī)學(xué)中的推拿暖宮療法與婦科保健技巧
- 湖北省生態(tài)環(huán)保有限公司招聘筆試沖刺題2025
- 西門(mén)子自動(dòng)化培訓(xùn)
- DB51T 2722-2020 四川省行政執(zhí)法文書(shū)標(biāo)準(zhǔn)
- 壓力測(cè)試報(bào)告
- 廣告牌的制作安裝及售后服務(wù)方案
- 船舶建造流程
- 減鹽防控高血壓培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論