生活随笔
收集整理的這篇文章主要介紹了
(Spring程序开发)简介程序开发步骤配置文件相关API
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1Spring簡介
1.1 Spring是什么
Spring是分層的Java SE/EE應(yīng)用full-stack 輕量級開源框架,
以IoC(Inverse Of Control:反轉(zhuǎn)控制)
和**AOP(Aspect Oriented Programming:面向切面編程)**為內(nèi)核。
提供了展現(xiàn)層SpringMVC和持久層Spring JDBCTTemplate以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級應(yīng)用技術(shù),還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE企業(yè)應(yīng)用開源框架。
1.2 發(fā)展歷程
1.3 Spring的優(yōu)勢
方便解耦,簡化開發(fā)
通過Ioc容器,將對象間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼造成的過度耦合AOP編程的支持
方便進(jìn)行面向切面編程聲明式事務(wù)的支持
通過聲明式方式靈活進(jìn)行事務(wù)管理,提高開發(fā)效率和質(zhì)量方便程序的測試
可以用非容器依賴的編程方式進(jìn)行測試工作方便集成各種優(yōu)秀的框架
Spring對各種優(yōu)秀框架支持降低JavaEE API的使用難度
Spring對JavaEE API 進(jìn)行薄封裝層,模板Java源碼
Spring對各種優(yōu)秀框架支持
2.1Spring程序開發(fā)步驟
導(dǎo)入Spring開發(fā)的基本包坐標(biāo)
<dependency><groupId>org.springframework
</groupId><artifactId>spring-context
</artifactId><version>5.0.5.RELEASE
</version></dependency>
編寫Dao接口和實(shí)現(xiàn)類創(chuàng)建Bean
public interface UserDao {public void save();
}
創(chuàng)建Spring核心配置文件
<bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao"></bean>
在Spring配置文件中配置UserDaoImpl
public class UserDaoImpl implements UserDao {public void save() {System
.out
.println("save running...");}
}
使用Spring的API獲得Bean實(shí)例
public class UserDaoDemo {public static void main(String
[] args
) {ApplicationContext app
= new ClassPathXmlApplicationContext( "applicationContext.xml");UserDao userDao
= (UserDao
)app
.getBean("userDao");userDao
.save();}
}
3 Spring配置文件
3.1 Bean標(biāo)簽基本配置
用于配置對象交由Spring來創(chuàng)建
默認(rèn)情況下它調(diào)用的是類中的無參構(gòu)造函數(shù)
如果沒有無參構(gòu)造函數(shù)則不能創(chuàng)建成功
基本屬性:
- id:Bean實(shí)例在Spring容器中的唯一標(biāo)識
- class:Bean的全限定名稱
3.2 Bean標(biāo)簽范圍配置
scope:指對象的作用范圍
-
singleton:默認(rèn),單例的,
Bean的實(shí)例化個(gè)數(shù)1個(gè),加載配置文件時(shí)創(chuàng)建bean對象
當(dāng)Spring核心文件被加載時(shí),實(shí)例化配置的Bean實(shí)例
-
prototype:多例的:
Bean的實(shí)例化個(gè)數(shù)多個(gè)
getBean時(shí)創(chuàng)建對象,每次都創(chuàng)建一個(gè)
當(dāng)調(diào)用getBean()方法時(shí)實(shí)例化Bean
<bean id
="userDao" class="com.itheima.dao.impl.UserDaoImpl" scope
="prototype"></bean
>
public void test1(){ApplicationContext app
= new ClassPathXmlApplicationContext( "applicationContext.xml");UserDao userDao1
= (UserDao
)app
.getBean("userDao");UserDao userDao2
= (UserDao
)app
.getBean("userDao");System
.out
.println(userDao1
);System
.out
.println(userDao2
);}
3.3 Bean的生命周期配置
- init-method:指定類中的初始化方法名稱
- destory-method:指定類中銷毀方法名稱
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy" scope="singleton"></bean>
3.4 Bean實(shí)例化的三種方式
<bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao"></bean>
3.6 Bean的依賴注入分析
因?yàn)閁serService和UserDao都在Spring容器中,而最終程序直接使用的是User Service,所以可以在Spring容器中,將UserDao設(shè)置到UserService內(nèi)部。
3.7 Bean的依賴注入概念
依賴注入:是Spring框架核心IOC的具體實(shí)現(xiàn)
在編寫程序時(shí),通過控制反轉(zhuǎn),把對象的創(chuàng)建交給了Spring,但是代碼中不可能出現(xiàn)沒有依賴的情況。IOC解耦只是降低他們的依賴關(guān)系,但不會消除。例如:業(yè)務(wù)層仍會調(diào)用持久層的方法。
那這種業(yè)務(wù)層和持久層的依賴關(guān)系,在使用Spring之后,就讓Spring來維護(hù)了,簡單的說,就是坐等框架的持久層對象傳入業(yè)務(wù)層,而不用我們自己去獲取。
Bean的依賴注入方式
怎么將UserDao注入到UserService內(nèi)部
private UserDao userDao
;
public UserServiceImpl(UserDao userDao
) {this.userDao
= userDao
;}
public UserServiceImpl() {}
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"><constructor-arg name="userDao" ref="userDao"></constructor-arg></bean>
private UserDao userDao
;public void setUserDao(UserDao userDao
) {this.userDao
= userDao
;}
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"><property name="userDao" ref="userDao"></property>
- P命名空間注入
P命名空間注入本質(zhì)也是set方法注入,但是比上述的set方法注入更加方便,主要體現(xiàn)在配置文件中
首先需要引入P命名空間
xmlns:p="http://www.springframework.org/schema/p"
其次需要修改注入方式
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>
3.8 Bean的依賴注入的數(shù)據(jù)類型
上面的操作,注入的都是引用Bean,除了對象的引用可以注入,普通數(shù)據(jù)類型、集合等都可以在容器中進(jìn)行注入
注入的三種數(shù)據(jù)類型
public class UserDaoImpl implements UserDao {private String username
;private int age
;public String
getUsername() {return username
;}public int getAge() {return age
;}public void setUsername(String username
) {this.username
= username
;}public void setAge(int age
) {this.age
= age
;}public void save() {System
.out
.println(username
+"====="+age
);System
.out
.println("save running...");}
}
- 引用數(shù)據(jù)類型
- 集合數(shù)據(jù)類型
public class UserDaoImpl implements UserDao {private List
<String> strList
;private Map
<String, User> userMap
;private Properties properties
;public void setStrList(List
<String> strList
) {this.strList
= strList
;}public void setUserMap(Map
<String, User> userMap
) {this.userMap
= userMap
;}public void setProperties(Properties properties
) {this.properties
= properties
;}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"><property name="strList"><list><value>aaa
</value><value>bbb
</value><value>ccc
</value></list></property><property name="userMap"><map><entry key="u1" value-ref="user1"></entry><entry key="u2" value-ref="user2"></entry></map></property><property name="properties"><props><prop key="p1">ppp1
</prop><prop key="p2">ppp2
</prop><prop key="p3">ppp3
</prop></props></property><property name="age" value="18"/></bean><bean id="user1" class="com.itheima.domain.User"><property name="name" value="Tom"/><property name="addr" value="BeiJing"/></bean><bean id="user2" class="com.itheima.domain.User"><property name="name" value="Lucy"/><property name="addr" value="TianJing"/></bean>
3.9 引入其他配置文件(分模塊開發(fā))
實(shí)際開發(fā)中,Spring的配置內(nèi)容非常多,這就導(dǎo)致Spring配置很繁雜且體積很大,所以,可以將部分配置拆解到其他配置文件中,而在Spring主配置文件通過import標(biāo)簽進(jìn)行加載
在主配置文件中引用分配置文件
<import resource="applicationContext-user.xml"/>
4 Spring相關(guān)API
4.1 ApplicationContext的繼承體系
applicationContext:接口類型,代表應(yīng)用上下文,可以通過其實(shí)例獲得Spring容器中的Bean對象
4.2 ApplicationContext的實(shí)現(xiàn)類
ClassPathApplicationContex
從類的根路徑下加載配置文件
FileSystemXmlApplicationContext
從磁盤路徑上加載配置文件,配置文件可以在磁盤的任意位置
ApplicationContext app
= new FileSystemXmlApplicationContext("D:\\JaedenXu\\Spring\\itheima_spring_ioc\\src\\main\\resources\\applicationContext.xml");
AnnotationConfigApplicationContext
當(dāng)使用注解配置容器對象時(shí),需要使用此類來創(chuàng)建spring容器,用來讀取注解
4.3 getBean()方法使用
如果容器中存在的某一類型的對象,有多個(gè)的情況下,用id的方式;如果只有一個(gè)用class的方式
其中,當(dāng)參數(shù)的數(shù)據(jù)類型時(shí)字符串時(shí),表示根據(jù)Bean的id從容器中獲得Bean實(shí)例,返回的是Object,需要強(qiáng)制轉(zhuǎn)換;
當(dāng)參數(shù)的數(shù)據(jù)類型是Class類型時(shí),表示根據(jù)類型從容器中匹配Bean實(shí)例,當(dāng)容器中相同類型的Bean有多個(gè)時(shí),此方法會報(bào)錯(cuò)。
4.4 知識要點(diǎn)
Spring的重點(diǎn)API
ApplicationContext app
= new classpathXmlApplicationContext("xml文件“)
app
.getBean("id")
app
.getBean(Class
)
總結(jié)
以上是生活随笔為你收集整理的(Spring程序开发)简介程序开发步骤配置文件相关API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。